美文网首页前端100问
【前端100问】Q33:下面的代码打印什么内容,为什么?

【前端100问】Q33:下面的代码打印什么内容,为什么?

作者: alanwhy | 来源:发表于2020-12-29 17:36 被阅读0次

写在前面

此系列来源于开源项目:前端 100 问:能搞懂 80%的请把简历给我
为了备战 2021 春招
每天一题,督促自己
从多方面多角度总结答案,丰富知识
下面的代码打印什么内容,为什么?
简书整合地址:前端 100 问

题目

var b = 10;
(function b() {
  b = 20;
  console.log(b);
})();

正文回答

重点是:非匿名自执行函数,函数名只读。

var b = 10;
(function b() {
  // 内部作用域,会先去查找是有已有变量b的声明,有就直接赋值20,确实有了呀。发现了具名函数 function b(){},拿此b做赋值;
  // IIFE的函数无法进行赋值(内部机制,类似const定义的常量),所以无效。
  // (这里说的“内部机制”,想搞清楚,需要去查阅一些资料,弄明白IIFE在JS引擎的工作方式,堆栈存储IIFE的方式等)
  b = 20;
  console.log(b); // [Function b]
  console.log(window.b); // 10,不是20
})();

所以严格模式下能看到错误:Uncaught TypeError: Assignment to constant variable

var b = 10;
(function b() {
  "use strict";
  b = 20;
  console.log(b);
})(); // "Uncaught TypeError: Assignment to constant variable."
var b = 10;
(function b() {
  window.b = 20;
  console.log(b); // [Function b]
  console.log(window.b); // 20是必然的
})();
var b = 10;
(function b() {
  var b = 20; // IIFE内部变量
  console.log(b); // 20
  console.log(window.b); // 10
})();

相关文章

网友评论

    本文标题:【前端100问】Q33:下面的代码打印什么内容,为什么?

    本文链接:https://www.haomeiwen.com/subject/zvhqoktx.html