函數聲明的寫法有一種,函數表達式有四種
函數聲明會被前置
函數表達式也會被提前,但是提前的是var add(即undefined)所以
再舉一個栗子
<script type="text/javascript">
fn1();//不會報錯,因為"提升了"函數聲明,函數調用可在函數聲明之前
function fn1(){
console.log("這里是函數聲明");
}
fn2();//會報錯,變量fn2還未保存對函數的引用,函數調用必須在函數表達式之后
var fn2=function(){
console.log("這里是函數表達式");
}
</script>
該函數不常用但是有一些經典的兼容性問題。如下所示:本圖片忽略掉//遞歸調用
下面那一行。即執行前面兩行代碼,在IE6~8會彈出false,在IE9+會報錯。
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’;
注意:立即調用指的是()()
第四項,函數構造器沒有名稱所以不說,函數表達式不可以是因為上面提到的NFE
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。