我正在尝试理解(可能是简单的概念)关于JS,我已经把下面的代码放在一起来解释我没有得到的东西。我不明白的是存储名称变量的位置。这个变量现在是全球的吗?
(function($) {
var name = '';
$.helloWorld = function(yourName) {
name = yourName;
console.log("Hello " + yourName);
}
}(jQuery));
答案 0 :(得分:4)
name
变量是外部函数的本地变量,因为它是使用var
关键字声明的。内部函数是一个包含对该变量的引用的闭包。这是一个更好的例子,显示了这一点:
(function($) {
var name = '';
$.setName = function(newName) {
name = newName;
}
$.showName = function() {
console.log("Name is: " + name);
}(jQuery));
定义之后,你可以这样做:
$.setName("Larry");
$.showName();
$.setName("Fred");
$.showName();
答案 1 :(得分:2)
这可以帮助您理解:
(function(){
var name;
var scope1;
// Here you can use scope1 and name
(function(){
var name; // <------------------------
var scope2; // |
// |
// Here you can use scope1,scope2, and name
(function(){
var name; // <------------------------------
var scope3; // |
// |
// Here you can use scope1,scope2,scope3, and name
})();
})();
})();
// Any\variable declared outside of any function scope is in the global scope.
// A variable declared here can be accessed by window.name from any scope
var name = 5;
所以在这个片段中,3个作用域由三个函数创建,在最里面,你可以访问具有唯一名称(scope1,scope2和scope3)的变量以及局部变量name
,是一个与中间范围不同的名称。重复使用这样的变量名来阻止访问外部作用域中的变量称为阴影。
请注意,未使用var
关键字声明的变量将被自动假定为在全局范围内。在全局范围内声明许多变量是一种不好的做法,因为它们很容易与其他脚本冲突。