Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法访问var变量,js中的作用域_Javascript - Fatal编程技术网

Javascript 无法访问var变量,js中的作用域

Javascript 无法访问var变量,js中的作用域,javascript,Javascript,我尝试了两个场景,一个可以访问数据变量,另一个不能。需要澄清我的范围概念吗 场景1:数据不可访问 功能测试(){ var data=“来自测试”; 第二个函数(); } 函数secondFunction(){ 返回函数(){ 控制台日志(数据); }(); } test()您需要将变量的范围增加到窗口对象,否则它将无法工作。 在当前代码中,变量的作用域仅限于函数。所以您不能访问函数外部的变量 类似的东西将在更大的范围内声明变量,在下面它将在窗口对象中声明变量,这样所有函数都可以访问它 wind

我尝试了两个场景,一个可以访问数据变量,另一个不能。需要澄清我的范围概念吗 场景1:数据不可访问

功能测试(){
var data=“来自测试”;
第二个函数();
}
函数secondFunction(){
返回函数(){
控制台日志(数据);
}();
}

test()您需要将变量的范围增加到
窗口
对象,否则它将无法工作。 在当前代码中,变量的作用域仅限于函数。所以您不能访问函数外部的变量

类似的东西将在更大的范围内声明变量,在下面它将在窗口对象中声明变量,这样所有函数都可以访问它

window.data = 1;
如果您喜欢这个,那么在给定的窗口中就可以访问它

一般应避免使用全局变量。您应该在函数范围内定义变量


在您的场景中,在第二种情况下,其工作是因为
数据
在给定函数的范围内,而在第一种情况下
数据
在第一个函数的范围内。这就是为什么它在第二种情况下有效,但在第一种情况下不起作用

在第二种情况下

function test1() {
  var data = "from Test1";
  var secondFunction1 = function() {
    return function() {
      console.log(data);
    }()
  }
  secondFunction1();
}
如果您看到您的
secondFuction1
能够获取数据,因为范围更大,这两者都是
test1()的一部分

任何不是基元类型(未定义、null、number、string、boolean)的内容都是JavaScript中的对象(或实例)。这意味着函数继承自对象。对象实例可以包含更多可以是函数的实例


所以,若你们用OOD的方式来处理上面的语句,那个么在你们的例子中,
test1()
是对象,在这个对象中,你们有一个名为
data
的属性和一个名为
secondFuction1()
的函数,在OOD中,函数可以访问对象的属性,这就是它在第二种情况下起作用的原因。

有很多相同的教程。还有很多很好的答案。在第二种情况下,您正在创建一个闭包,它会记住创建闭包时传入的值。在第一种情况下,您试图访问
test()
函数的本地变量。您可以查看一下我的答案,如果你得到你要问的信息,请投票/接受回答如果你需要更多细节,请告诉我question@nikamanish-从问题中,我认为他想知道如何增加可变范围,对吗?这就是为什么我告诉他增加变量的范围,他想知道为什么场景1不起作用,场景2起作用。@nikamanish-我在更新的答案中解释了……让我写下来more@nikamanish--我现在更新了lot,我希望OP能理解为什么它在案例2中起作用