
1 Floyder Apr 18, 2019 |
2 rodjl Apr 18, 2019 via iPhone 有大佬说一下吗?这个 a=2 作用到哪里去了 |
3 YanSep Apr 18, 2019 via Android 我还以为问 你觉得你能当东哥的兄弟吗? |
4 rabbbit Apr 18, 2019 打印结果是 a 函数 --- 比如,当访问函数内的 foo 变量时,Javascript 会按照下面顺序查找: 当前作用域内是否有 var foo 的定义。 函数形式参数是否有使用 foo 名称的。 函数自身是否叫做 foo。 回溯到上一级作用域,然后从 #1 重新开始。 --- 摘自 js 秘密花园 |
5 rabbbit Apr 18, 2019 var a = 1; (function a(){ ..'use strict' ..a = 2; ..console.log(a)} )() TypeError: Assignment to constant variable. |
&nbs; 6 JenJieJu Apr 18, 2019 等价于:a1 和 a 代表不同指向; window.a = undefined; var a1 = 1; window.a = function (){ a1 = 2; console.log(a) } |
7 jishu541464750 Apr 18, 2019 |
8 rabbbit Apr 18, 2019 a = 2 和 console.log(a)是同一个 a. 只不过 a = 2 没有生效,我也不明白为什么非严格模式下(a = 2)不会报错. 改成严格模式的话 a = 2 会报错 TypeError: Assignment to constant variable. |
9 ayase252 Apr 18, 2019 via iPhone https://developer.mozilla.org/en-US/docs/web/Javascript/Reference/Operators/function 看 named function expresssion 那一节。把其他值赋值给 name 也改变不了 name |
10 guyujiezi Apr 18, 2019 function a(){a = 2;console.log(a)} a() 又是另一番景象 |
11 JenJieJu Apr 18, 2019 @jishu541464750 函数里面 a = 2 的 a 指向 外部 var 的 a,console.log 的 a 指向 windows 的 a ; |
12 maichael Apr 18, 2019 ``` var a = 1; var b; (function a(){ a = 2; b=a; console.log(a)})(); console.log(b) ``` |
13 HuHui Apr 18, 2019 via Android 这种题除了让你知道 js 很烂,还有什么用 |
14 Vegetable Apr 18, 2019 兄弟不会出这种题目为难兄弟. |
16 troywith77 Apr 18, 2019 via Android a 函数内部的 a 指向函数本身,a=2 不生效,所以打印 a 本身 |
17 plqws Apr 18, 2019 神烦这种莫名其妙的傻面试题,能写出这种代码的弱智能开除一个是一个,越是小公司越是喜欢搞这种幺蛾子 |
18 SakuraKuma Apr 18, 2019 因为 function 的 Identifier 是 CreateImmutableBinding 出来的。 最上面的 var a=1;就是个混淆视听。 |
19 rabbbit Apr 18, 2019 找到为什么不能修改 a 了 看 es5 文档 https://www.w3.org/html/ig/zh/wiki/ES5/%E5%87%BD%E6%95%B0%E5%AE%9A%E4%B9%89#FunctionExpression ``` 产生式 FunctionExpression : function Identifier ( FormalParameterListopt ) { FunctionBody } 的解释执行如下: 1 令 funcEnv 为以运行中执行环境的 LexicalEnvironment 为参数调用 NewDeclarativeEnvironment 的结果。 2 令 envRec 为 funcEnv 的环境记录项。 3 以 Identifier 的字符串值为参数调用 envRec 的具体方法 CreateImmutableBinding(N)。// 注意这里,创建了一个不可变绑定 ``` |
20 zbinlin Apr 18, 2019 |
21 MzM2ODkx Apr 18, 2019 (function a () {}) 这是个函数表达式,这个 a 就是函数名称,它的特点是作为函数体(作用域内)的本地变量,不能被修改,也不能被外部访问。 |
22 zaul Apr 18, 2019 花里胡哨,捉起来霸死 |
23 jin5354 Apr 18, 2019 还真是知识盲点 具名函数表达式中函数 name 是不可被修改的,函数声明中函数 name 是可被修改的 花里胡哨,下次我还忘 |
24 1KN6sAqR0a57no6s Apr 18, 2019 ```js function a() { console.log(a); // [Function: a] a = 100; console.log(a); // 100 } a(); console.log(a); // 100 function b() { "use strict"; console.log(b); // [Function: b] b = 100; console.log(b); // 100 } b(); console.log(b); // 100 (function c() { console.log(c); // [Function: c] c = 100; console.log(c); // [Function: c] })(); console.log(c); // ReferenceError: c is not defined "use strict"; (function d() { console.log(d); // TypeError: Assignment to constant variable. d = 100; console.log(d); })(); console.log(d); // ReferenceError: d is not defined ``` |
25 1KN6sAqR0a57no6s Apr 18, 2019 ```js var a = 100; var b = 999; (function a() { console.log(b); // 999 根据词法环境规则,可以拿到外层的 b 的值 b = 888; // 也可以修改外层的 b 的值 a = 200; // 非严格模式 && IIFE, 此时 a 的值无法被修改, 静默失败 console.log(a); // [Function: a] })(); //并没有在全局环境声明函数 a,而是用表达式产生一段程序,立即执行 console.log(a); // 100 console.log(b); // 888 ``` |
26 rabbbit Apr 18, 2019 |
27 hahahasnoopy Apr 19, 2019 via Android 刚学 js 的时候出这种题我觉得哇,好厉害,好神奇;现在只让我觉得 js 是个垃圾语言,每天在语言坑里面打转~ |