javascript - Js 函數(shù)聲明和函數(shù)表達(dá)式
問(wèn)題描述
`alert(sum(10,10));var sum=function(num1,num2){
return num1+num2;
};`為什么報(bào)錯(cuò),不是有變量提升嗎
問(wèn)題解答
回答1:在我們寫js code 的時(shí)候,我們有2中寫法,一種是函數(shù)表達(dá)式,另外一種是函數(shù)聲明方式。我們需要重點(diǎn)注意的是:
只有函數(shù)聲明形式才能被提升。
1、函數(shù)聲明形式 【成功】
function myTest(){ foo(); function foo(){ alert('我來(lái)自 foo'); } } myTest();
2、函數(shù)表達(dá)式方式【失敗】
function myTest(){ foo(); var foo =function foo(){ // 看這里alert('我來(lái)自 foo'); } } myTest();
看我這篇: http://www.jianshu.com/p/85a2...
回答2:函數(shù)表達(dá)式不會(huì)提升。
看一遍《javascript高級(jí)程序設(shè)計(jì)》吧。
回答3:聲明和表達(dá)式是不一樣的,聲明的話不光定義會(huì)提前,賦值也會(huì)提前賦好,而表達(dá)式不會(huì),舉個(gè)栗子:
a();function a(){}; //等同于var a = function(){};a();///////對(duì)于表達(dá)式有a();var a = function(){}; //等同于var a;a();a = function(){}; //簡(jiǎn)單來(lái)講就是表達(dá)式的賦值必須要等程序運(yùn)行到相關(guān)行的時(shí)候才會(huì)進(jìn)行回答4:
同樓上,你的函數(shù)創(chuàng)建方式是函數(shù)字面量形式,改成
alert(sum(10,10));function sum(num1,num2){ return num1+num2;}
就行了
相關(guān)文章:
1. java - Spring Mvc全局異常處理器@ControllerAdvice不起作用?2. html - 移動(dòng)端radio無(wú)法選中3. javascript - 關(guān)于禁用文本選擇與復(fù)制的問(wèn)題4. Java中call by value和call by reference的區(qū)別5. 前端 - html5 audio不能播放6. node.js - 在vuejs-templates/webpack中dev-server.js里為什么要exports readyPromise?7. css - 關(guān)于偽類背景問(wèn)題8. css3 - transition屬性當(dāng)鼠標(biāo)一開(kāi)的時(shí)候設(shè)置的時(shí)間不起作用9. html5 - 如何實(shí)現(xiàn)圖中的刻度漸變效果?10. CSS3 border凹陷該如何編寫?
