一个京东前端面试题

2019-04-18 10:36:28 +08:00
 yasumoto
var a = 1;
(function a(){
a = 2;
console.log(a)})()

问最后打印的结果
5024 次点击
所在节点    京东
27 条回复
iMusic
2019-04-18 16:48:44 +08:00
(function a () {})

这是个函数表达式,这个 a 就是函数名称,它的特点是作为函数体(作用域内)的本地变量,不能被修改,也不能被外部访问。
zaul
2019-04-18 16:59:28 +08:00
花里胡哨,捉起来霸死
jin5354
2019-04-18 17:06:39 +08:00
还真是知识盲点
具名函数表达式中函数 name 是不可被修改的,函数声明中函数 name 是可被修改的
花里胡哨,下次我还忘
YuxiangLuo
2019-04-18 20:12:12 +08:00
```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
```
YuxiangLuo
2019-04-18 20:16:56 +08:00
```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
```
rabbbit
2019-04-18 22:22:45 +08:00
hahahasnoopy
2019-04-19 09:00:25 +08:00
刚学 js 的时候出这种题我觉得哇,好厉害,好神奇;现在只让我觉得 js 是个垃圾语言,每天在语言坑里面打转~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/556295

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX