开发者社区> 问答> 正文

下面的代码打印什么内容,为什么?#前端面试

下面的代码打印什么内容,为什么?

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

展开
收起
Bill 2020-05-23 13:51:56 1728 0
1 条回答
写回答
取消 提交回答
  • 领取2折优惠劵,有几率免单哦!http://www.weilai.info/tool/326.html

    image.png

    针对这题,在知乎上看到别人的回答说:

    函数表达式与函数声明不同,函数名只在该函数内部有效,并且此绑定是常量绑定。
    对于一个常量进行赋值,在 strict 模式下会报错,非 strict 模式下静默失败。
    IIFE中的函数是函数表达式,而不是函数声明。
    实际上,有点类似于以下代码,但不完全相同,因为使用const不管在什么模式下,都会TypeError类型的错误

    实际上,有点类似于以下代码,但不完全相同,因为使用const不管在什么模式下,都会TypeError类型的错误

    const foo = function () {
      foo = 10;
      console.log(foo)
    }
    (foo)() // Uncaught TypeError: Assignment to constant variable.
    
    

    我的理解是,b函数是一个相当于用const定义的常量,内部无法进行重新赋值,如果在严格模式下,会报错"Uncaught TypeError: Assignment to constant variable." 例如下面的:

    var b = 10;
    (function b() {
      'use strict'
      b = 20;
      console.log(b)
    })() // "Uncaught TypeError: Assignment to constant variable."
    
    
    2020-05-24 11:46:49
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Vue.js 在前端服务化上的探索与实践 立即下载
阿里文娱大前端技术实践 立即下载
前端代码是怎样智能生成的 立即下载