我尝试了2个场景,其中一个我可以访问数据变量,而其他的则无法访问。需要澄清以清除我的范围概念 场景1:无法访问数据
function test() {
var data = "from Test";
secondFunction();
}
function secondFunction() {
return function() {
console.log(data);
}();
}
test();
场景2:可以访问数据
function test1() {
var data = "from Test1";
var secondFunction1 = function() {
return function() {
console.log(data);
}()
}
secondFunction1();
}
test1();
答案 0 :(得分:0)
你需要将变量的范围增加到window
对象,而不是它的工作。
在您当前的代码范围内变量仅限于该函数。所以你不能访问变量外部函数。
类似于在较大范围内声明变量,在下面它在window对象声明变量,因此它可以被所有函数访问。
window.data = 1;
如果你这样做,那么它可以在给定的窗口中访问。
通常应避免使用全球。您应该在函数范围内定义变量。
在第二种情况下,它的工作原因是data
在给定函数的范围内,并且在第一种情况下data
在第一个函数的范围内。这是它在第二种情况下工作的原因,但不是在第一种情况下。
在第二种情况下
function test1() {
var data = "from Test1";
var secondFunction1 = function() {
return function() {
console.log(data);
}()
}
secondFunction1();
}
如果您看到secondFuction1
能够获取数据,因为范围较大,则两者都是test1()
的一部分。
任何非原始类型(undefined,null,number,string,boolean)都是JavaScript中的对象(或实例)。这意味着函数继承自object。对象实例可以包含更多可以是函数的实例。
所以如果你以OOD的方式通过上面的语句,那么test1()
就是对象,在那个对象中你有一个名为data
的属性和名为secondFuction1()
的函数,在OOD中函数可以访问对象的属性,这就是它在你的第二种情况下工作的原因。