[英]Trouble understanding a basic concept in Javascript Higher Order Functions
[英]Basic understanding of functions and declarations in javascript
我對javascript中的函數和變量聲明缺乏一些基本的了解,並且很難真正理解它。
我有此函數“ urlParam”,將其放置在常規文件(“ reusable.js”)中以進行重用:
(function (ko, $) {
var urlParam = function (name, w) {
w = w || window;
var rx = new RegExp('[\&|\?]' + name + '=([^\&\#]+)'),
val = w.location.search.match(rx);
return !val ? '' : val[1];
}
})(ko,jQuery);
然后,我有一個viewModel,我想在其中訪問此功能,並將其放置在文件“ viewmodel.js”中:
ViewModel = function(){
var userId = urlParam("UserId");
};
在我的view.html中,我同時包含了兩個文件,然后在html之后,將視圖模型綁定到視圖:
ko.applyBindings(new ViewModel());
這會導致引用錯誤: ReferenceError: urlParam is not defined
但是,如果我將urlParam-function放在(function(ko,$){})(ko,jQuery);之外; 聲明它完美運行。
這是什么(function () {})();
真的嗎?
它稱為立即調用函數表達式。
什么是JavaScript中的(function(){})()構造?
該表達式創建一個新的作用域,並且可以訪問通過外部括號傳遞到內部括號的參數以及作用域鏈中的任何變量,但是您無法訪問函數內的變量,因為它們是隱藏的在功能范圍內。
嘗試這樣的事情:
var urlParamVar = (function (ko, $) {
var urlParam = function (name, w) {
w = w || window;
var rx = new RegExp('[\&|\?]' + name + '=([^\&\#]+)'),
val = w.location.search.match(rx);
return !val ? '' : val[1];
}
return urlParam;
})(ko,jQuery);
這樣,您將返回urlParam並將其設置為將保存該功能的變量urlParamVar。
但是,這並不是一種非常結構化的方式來執行您要嘗試執行的操作。
您必須嘗試不使用“ var”來進行全局功能
(function (ko, $) {
urlParam = function (name, w) {
//.......
}
})(ko,jQuery);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.