javascript - Js 函數(shù)聲明和函數(shù)表達(dá)式
問題描述
`alert(sum(10,10));var sum=function(num1,num2){
return num1+num2;
};`為什么報(bào)錯(cuò),不是有變量提升嗎
問題解答
回答1:在我們寫js code 的時(shí)候,我們有2中寫法,一種是函數(shù)表達(dá)式,另外一種是函數(shù)聲明方式。我們需要重點(diǎn)注意的是:
只有函數(shù)聲明形式才能被提升。
1、函數(shù)聲明形式 【成功】
function myTest(){ foo(); function foo(){ alert('我來自 foo'); } } myTest();
2、函數(shù)表達(dá)式方式【失敗】
function myTest(){ foo(); var foo =function foo(){ // 看這里alert('我來自 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)單來講就是表達(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. 如何解決docker宿主機(jī)無法訪問容器中的服務(wù)?2. 前端 - CSS3 box-shadow如何設(shè)置,或者用什么方法可以產(chǎn)生圖中這樣陰影的效果。3. node.js - vue-cll+sass 樣式不出來 已經(jīng)npm install sass、 sass-loader了4. html - css 如何讓文字標(biāo)題顯示在邊框上?5. docker 下面創(chuàng)建的IMAGE 他們的 ID 一樣?這個(gè)是怎么回事????6. 在應(yīng)用配置文件 app.php 中找不到’route_check_cache’配置項(xiàng)7. html按鍵開關(guān)如何提交我想需要的值到數(shù)據(jù)庫8. vim中編輯HTML文件時(shí)換行不能縮進(jìn)9. HTML5中怎么判斷用戶是否正在瀏覽頁面?10. html - 微信端video標(biāo)簽播放mp4視頻,安卓端提示視頻解析錯(cuò)誤
