標籤:cee style 常見 console enc erro 返回 code name
定義函數的兩種常見的方法:
1 . 函式宣告
2. 函數運算式
# 差異
(1)函式宣告 ,具有函式宣告提升的特徵。
(2)函式宣告的函數的name屬性為函數的名稱;使用函數運算式定義的函數在ES5中,name屬性為空白字串,在ES6中為函數的名稱。
# 函式宣告提升
函式宣告
1 sayHello();//在函式宣告之前調用函數不會報錯,因為函式宣告提升。2 function sayHello(){3 console.log("Hello!");//Hello!4 console.log(sayHello.name);//sayHello5 }
函數運算式
1 sayHello();// TypeError: sayHello is not a function 使用函數運算式的方法定義函數,在變數聲明函數之前調用函數會報錯。2 var sayHello = function (){3 console.log("Hello!");//Hello!4 console.log(sayHello.name);//sayHello。注意:在ES5中,匿名函數的name屬性是Null 字元串(P176),在ES6中返回這個具名函數原本的名字。5 }6 sayHello();//在這裡調用不會報錯。
# 注意以下這種情況
1 //不要這樣做。由於函式宣告提升的原因,以下代碼在ECMAScript中屬於無效文法,瀏覽器嘗試修正的錯誤的做法不一致。P176 2 var flag = true; 3 if(flag){ 4 function sayHi(){ 5 console.log("Hi"); 6 } 7 }else{ 8 function sayHi(){ 9 console.log("Yo");10 }11 }12 sayHi();//strict 模式下會報錯。 ReferenceError: sayHi is not defined
1 //可以這樣做,使用函數運算式。 2 var flag = true; 3 var sayHi; 4 if(flag){ 5 sayHi = function(){ 6 console.log("Hi"); 7 } 8 }else{ 9 sayHi = function(){10 console.log("Yo");11 }12 }13 sayHi();
JS高程7.函數運算式(1)