javascript - Js 函數聲明和函數表達式
問題描述
`alert(sum(10,10));var sum=function(num1,num2){
return num1+num2;
};`為什么報錯,不是有變量提升嗎
問題解答
回答1:在我們寫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...
回答2:函數表達式不會提升。
看一遍《javascript高級程序設計》吧。
回答3:聲明和表達式是不一樣的,聲明的話不光定義會提前,賦值也會提前賦好,而表達式不會,舉個栗子:
a();function a(){}; //等同于var a = function(){};a();///////對于表達式有a();var a = function(){}; //等同于var a;a();a = function(){}; //簡單來講就是表達式的賦值必須要等程序運行到相關行的時候才會進行回答4:
同樓上,你的函數創建方式是函數字面量形式,改成
alert(sum(10,10));function sum(num1,num2){ return num1+num2;}
就行了
相關文章:
1. php工具中的mysql還是5.1以下的,請問如何才能升級到5.1以上?2. java - 根據月份查詢多個表里的內容怎么實現好?3. 前端 - 關于img父容器的高度會比img的高度多幾像素的問題?4. javascript - 在 model里定義的 引用表模型時,model為undefined。5. atom開始輸入!然后按tab只有空格出現沒有html格式出現6. css3 - 這個右下角折角用css怎么畫出來?7. css3 - 沒明白盒子的height隨width的變化這段css是怎樣實現的?8. python3.x - c++調用python39. javascript - 移動端自適應10. ios - 類似微博首頁,一張圖的時候是如何確定圖大小的?
