冴羽
冴羽
@double-chen 动态作用域和静态作用域,决定的是作用域链的顺序
@yangshun352607664 结果是 10 ,因为变量 a 并不能读取到对象 o 的属性 a ,如果 console.log(o.a),就会打印 11,函数 fn 的作用域链为 [AO, Global.VO],而 Global.VO 中包括了变量 a 和变量 o。
@mengxin-FE 词法作用域决定了变量查找的顺序,这个顺序是从函数内部开始,然后到函数定义的外层,函数内部已经有值,所以就会打印 2
@nicelj 你说的是 ```js function out () { function inner() { } } ``` 这种形式吗? 如果是这种,可以接着往下看~
@nicelj ```js function out( function (){console.log(1)} ){} ``` 首先这种写法会导致语法错误,正常应该这样写: ```js var value = 1; var f = function() { console.log(value) } function out(f) { var value = 2; f(); }...
@JarenZheng 使用 bash
@nicelj 跟上面的例子是一样的,都是 [f.AO, global.VO]
@nicelj 关于作用域: 此外,作用域是动态的,这跟动态作用域不是一个概念哈~
@thisisandy 这段代码返回的确实是 undefined,并不是 'local scope',不知道你是怎么写的,不如试试不用 return, 改成 console.log ```js f(); function f() { console.log(scope ; } var scope = "local scope"; ```
@thisisandy 这段代码确实是返回 "local scope",因为是根据函数创建的位置,然后向外查找变量,自然是 'local scope' ______________________________________________ 说错了…… 应该是 undefined,因为有函数提升和变量提升,相当于 ```js function f() {return scope}; var scope; f(); scope = "local scope"; ```