美文网首页
取消行结束符时出现的立即执行函数的BUG

取消行结束符时出现的立即执行函数的BUG

作者: 像烟花一样绚烂 | 来源:发表于2019-06-27 09:45 被阅读0次

今天群里有人问了一个很简单(看似)的问题,下面的这段代码alert的值是多少?

var number = 10;
var showNumber = function () {
  alert(number);
}
 
(function () {
  number = 20;
  showNumber();
})()

按照正常的逻辑,number是全局作用域的变量,又因为number = 20;是在alert(number);之前执行,所以alert出来的值应该是20


但是,复制到console下执行,alert出来的值却是10,而且关闭alert对话框之后,控制台报错

VM232:9 Uncaught TypeError: (intermediate value)(...) is not a function
    at <anonymous>:9:3

没看懂这行log的意思,仔细想了好一会儿才明白,代码执行的顺序和预期的是不一样的,因为没有;行结束符,所以实际执行的时候是这样的:

var number = 10;
var showNumber = ((function () {
  alert(number);
})(function () {
  number = 20;
  showNumber();
}))()

其中

function () {
  number = 20;
  showNumber();
}

只是作为参数,本身并没有执行,所以number值为1,而因为

((function () {
  alert(number);
})(function () {
  number = 20;
  showNumber();
}))

执行结果为undefined,不是方法,继续执行undefined()报错

相关文章

  • 取消行结束符时出现的立即执行函数的BUG

    今天群里有人问了一个很简单(看似)的问题,下面的这段代码alert的值是多少? 按照正常的逻辑,number是全局...

  • JS基础 -- 立即执行函数

    /** 立即执行函数* 函数定义完,立即被调用,这种函数焦作立即执行函数* 立即执行函数往往只会执行一次** ...

  • 立即执行函数、函数作用域链、闭包

    函数表达式 立即执行函数 会出现语法错误的提示javascript提供的执行函数的语法 函数会直接执行,打出1语句...

  • 立即执行函数

    本文涉及知识点 什么是立即执行函数? 立即执行函数有什么用? 什么是立即执行函数? 立即执行函数就是: 声明一个匿...

  • 立即执行函数

    立即执行函数时前置 立即执行函数(IIFE)在 JS 非常常用,作用就是构造一个函数级的变量作用域 functio...

  • Js立即执行函数

    js立即执行函数可以让你的函数在创建后立即执行,js立即执行函数模式是一种语法,可以让你的函数在定义后立即被执行,...

  • 复习笔记之API(14)

    立即执行函数 立即执行函数:不需要调用,立马能够自己执行的函数作用:创建一个独立作用域,立即执行函数里面所有的变量...

  • 立即执行的函数

    结构 使用案例

  • JS重要概念之立即执行函数与闭包高级

    #立即执行函数表达式IIFE,简称“立即执行函数” 立即执行函数表达式,IIFE(immediately-invo...

  • 九 立即执行函数

    立即执行函数除了执行完立即释放,跟普通函数没有区别。 返回值,执行期上下文,预编译等函数有的,立即执行函数都是有的...

网友评论

      本文标题:取消行结束符时出现的立即执行函数的BUG

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