美文网首页
javascript 之 IIFE(立即执行函数表达式)

javascript 之 IIFE(立即执行函数表达式)

作者: 采姑娘的小智障 | 来源:发表于2017-05-04 17:01 被阅读0次

函数表达式和函数声明

var test=function(){} #函数表达式 function test(){} #函数声明

函数调用方式

var test=function(){}
 test()
function(){}()   //SyntaxError:Unexpected token )

如果是在一条语句后面加上括号,那么该括号只是用来控制优先级的。所以上面的代码相当于声明了一个函数,然后执行()语句,但是()中内容为空,所以报错。
正确方式:

(function test(){}())

函数表达式与函数声明的应用

1.使用函数表达式
  if (true) {
    var foo = function () {
        document.write("1");
    }
}
else {
    var foo = function () {
        document.write("2");
    }
}
foo();//1

调整位置后

foo();//undefined
if (true) {
var foo = function(){
    document.write( "1" );
  }
}
 else {
   var foo = function(){
    document.write( "2" );
    }
}

javascript解释器在解释代码时会将变量声明先提升到块级作用域最前端,即

var foo;
foo();//undefined
if (true) {
    foo = function () {
        document.write("1");
    }
}
else {
    foo = function () {
        document.write("2");
    }
}
2.使用函数声明
if (true) {
    function foo() {
        document.write("1");
    }
}
else {
    function foo() {
        document.write("2");
    }
}
foo();      // 2

原来函数声明和变量一样,都有一个提升的过程,而和函数表达式只会提升声明不一样,函数声明即会提升声明,也会提升定义,所以第二个foo的定义把第一个foo给替换掉了,即

 function foo() {
        document.write("1");
    }
 function foo() {
        document.write("2");
    }

相关文章

网友评论

      本文标题:javascript 之 IIFE(立即执行函数表达式)

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