gpt4 book ai didi

javascript - 为什么即使没有在函数中定义一个自由标识符,也会找到它?

转载 作者:行者123 更新时间:2023-12-03 01:30:46 25 4
gpt4 key购买 nike

function f(){
function f1(){
console.log(a)
}
var a =3;
console.log(this.hasOwnProperty("a"))
console.log(f.hasOwnProperty("a"))
f1();
}
f()

输出:

false
false
3

如果 JS 有词法作用域,那么 f1 的作用域是在定义 f1 时定义的,而当时 a 还没有定义定义的。而且a不是对象的属性,那么我的问题是为什么f1找到标识符a

最佳答案

function f(){
function f1(){
console.log(a)
}
var a =3;
console.log(this.hasOwnProperty("a"))
console.log(f.hasOwnProperty("a"))
f1();
}
f()

上面的代码片段将首先执行函数 f步骤如下:

  1. 声明变量 a //a is undefined at this step (又名吊装)
  2. 初始化函数f1 //not invoking at all
  3. 将 3 赋给变量 a
  4. 将两条语句记录为 false
  5. 调用函数f1
  6. f1试图console.log(a) ,和变量a未在f1内找到
  7. 执行词法链查找,并尝试查找变量a在功能f
  8. 找到它,打印它,退出

问题并不在于 hoisting正如 @CertainPerformance 所指出的,因为真正发生的事情是,当 f1 时试图执行 logging ,它只是执行词法链查找来查找变量 a在功能f

关于javascript - 为什么即使没有在函数中定义一个自由标识符,也会找到它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51316294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com