函數聲明和函數表達式


1. 函數聲明和函數表達式

函數聲明的寫法有一種,函數表達式有四種
這里寫圖片描述

2. 函數聲明和函數表達式的區別

函數聲明會被前置
函數表達式也會被提前,但是提前的是var add(即undefined)所以

  • 函數聲明可以在前面使用
  • 函數表達式不可以在前面使用

這里寫圖片描述

再舉一個栗子

        <script type="text/javascript"> 
fn1();//不會報錯,因為"提升了"函數聲明,函數調用可在函數聲明之前
function fn1(){
console.log("這里是函數聲明");
}

fn2();//會報錯,變量fn2還未保存對函數的引用,函數調用必須在函數表達式之后
var fn2=function(){
console.log("這里是函數表達式");
}
</script>
3. 命名函數表達式

該函數不常用但是有一些經典的兼容性問題。如下所示:本圖片忽略掉//遞歸調用下面那一行。即執行前面兩行代碼,在IE6~8會彈出false,在IE9+會報錯。
這里寫圖片描述

4. Function構造器

Function構造器有兩種寫法,結果都是一樣的。

  var func =new Function('a','b','console.log(a+b);');
func(1,2);//3

var func =Function('a','b','console.log(a+b);');
func(1,2);//3

case1
function函數構造器里面創建的變量,依然是局部變量,后面的括號()()代表可以立即執行;
case2
function可以拿到全局變量,但是拿不到var localVal=’local’;
這里寫圖片描述

5. 比較

這里寫圖片描述

注意:立即調用指的是()()
第四項,函數構造器沒有名稱所以不說,函數表達式不可以是因為上面提到的NFE


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com