Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.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:什么时候创建全局脚本_Javascript - Fatal编程技术网

Javascript:什么时候创建全局脚本

Javascript:什么时候创建全局脚本,javascript,Javascript,在下面的函数中,全局变量将在什么时候创建;执行test()之前还是之后 var test = function(){ foo = 5 } test() 编辑:我指的是foo变量 …在执行test()之前还是之后 var test = function(){ foo = 5 } test() 它取决于您所引用的全局变量,test或foo 对于测试:之前变量声明被“挂起”,它们在执行它们出现的范围内的任何分步代码之前被处理;全局代码在脚本中全局范围内的任何分步代码之前执行。(后续脚本

在下面的函数中,全局变量将在什么时候创建;执行test()之前还是之后

var test = function(){
  foo = 5
}

test()
编辑:我指的是foo变量

…在执行
test()之前还是之后

var test = function(){
  foo = 5
}

test()
它取决于您所引用的全局变量,
test
foo

对于
测试
:之前<代码>变量
声明被“挂起”,它们在执行它们出现的范围内的任何分步代码之前被处理;全局代码在脚本中全局范围内的任何分步代码之前执行。(后续脚本将分别处理,首先是vars,然后是分步代码。)

对于
foo
:在

该代码的顺序为:

  • 声明发生在:
  • 全局
    测试
    使用值
    未定义
    创建
  • 一步一步执行完成:
  • 执行赋值
    test=function(){foo=5}
  • 函数被创建
  • 它被分配到
    test
  • 执行
    test()
  • 赋值
    foo=5
    完成,创建了一个名为
    foo
    的隐式全局变量(更多信息请访问我的博客:)

  • 当解释器尝试分配变量
    foo
    时,将创建变量
    foo
    ,因此在函数执行期间

    var test = function(){
      foo = 5
    }
    
    window.hasOwnProperty('foo'); // false
    
    test()
    
    window.hasOwnProperty('foo'); // true
    

    这很容易测试:

    //函数中的代码不会被计算(函数中的任何变量也不会被提升)
    //直到调用该代码为止
    var测试=函数(){
    foo=5;
    }
    //如果说foo是未定义的,那么这将失败,因此我们知道
    //还没有创建
    //console.log(foo);
    //调用函数并强制计算其中的代码
    测试()
    //工作。已经创建了全局。。
    console.log(foo)在您的代码中

     var test = function(){  foo = 5};   
         test();
    
    test是保存函数对象的全局变量。它是在全局执行环境中调用test()函数之前创建的


    foo也是全局变量,因为不存在var、let或const关键字。但它将在调用test()函数后创建。

    如果您能澄清您是否对
    test
    foo
    @Pointy感兴趣,那将很有帮助,我想他会询问
    foo
    ,由于它是在没有
    var
    的情况下创建的,并且被设计成globalIt,所以实际上还是可以这么说的。您可以安全地使用
    console.log(typeof foo)
    来查看它是否被创建(之前是
    “未定义的”
    ,之后是
    “数字”
    )。还有
    this.hasOwnProperty(“foo”)
    (或
    window.hasOwnProperty(“foo”)
    )。@T.J.Crowder是的,但我以这种方式展示它有两个原因。1) 获取错误是未创建变量的非常有说服力的证据,2)这是最简单的测试。“获取错误是未创建变量的非常有说服力的证据”:-D True
    foo
    不是局部变量-它是全局变量,在
    test()返回后将保持不变。有关示例,请参见下面的代码片段。@scott u是对的,我忽略了没有var、let或constkeyword@RafiqueAhmed你“忽略”了一件非常大的事情——这就是问题所在……而你已经纠正了你的局部和全局错误。你还没有回答老年退休金计划的问题。