`alert(sum(10,10));var sum=function(num1,num2){
return num1+num2;
};`為什麼報錯,不是有變數提升嗎
在我們寫js code 的時候,我們有2中寫法,一種是函數表達式,另外一種是函數宣告方式。 我們需要專注的是:
只有函數宣告形式才能被提升。
1、函數宣告形式 【成功】
function myTest(){ foo(); function foo(){ alert("我来自 foo"); } } myTest();
2、函數表達式方式【失敗】
function myTest(){ foo(); var foo =function foo(){ // 看这里 alert("我来自 foo"); } } myTest();
看我這篇:http://www.jianshu.com/p/85a2...
函數表達式不會提升。
看一遍《javascript高級程式設計》吧。
聲明和表達式是不一樣的,聲明的話不光定義會提前,賦值也會提前賦好,而表達式不會,舉個栗子:
a(); function a(){}; //等同于 var a = function(){}; a(); ///////对于表达式有 a(); var a = function(){}; //等同于 var a; a(); a = function(){}; //简单来讲就是表达式的赋值必须要等程序运行到相关行的时候才会进行
同樓上,你的函數創建方式是函數字面量形式,改成
alert(sum(10,10)); function sum(num1,num2){ return num1+num2; }
就行了
在我們寫js code 的時候,我們有2中寫法,一種是函數表達式,另外一種是函數宣告方式。
我們需要專注的是:
1、函數宣告形式 【成功】
2、函數表達式方式【失敗】
看我這篇:http://www.jianshu.com/p/85a2...
函數表達式不會提升。
看一遍《javascript高級程式設計》吧。
聲明和表達式是不一樣的,聲明的話不光定義會提前,賦值也會提前賦好,而表達式不會,舉個栗子:
同樓上,你的函數創建方式是函數字面量形式,改成
就行了