亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我發現一個蛋疼的問題,sum難道是javascript的關鍵字不成?

我發現一個蛋疼的問題,sum難道是javascript的關鍵字不成?

我吃炸土豆 2016-02-22 11:28:32
今天寫三個數求和的時候,發現函數名字是sum的時候,那個函數只能調用一次,兩次以上就有問題;而改函數名字之后,就對了??!醉了醉了。問題代碼如下<!DOCTYPE?HTML> <html> <head> <meta?http-equiv="Content-Type"?content="text/html;?charset=gbk"?/> <title>函數傳參</title> <script?type="text/JavaScript"> ???function?sum(x,?y,?z)???????????????? { ??sum?=?x?+?y?+z; ??document.write(x+"、"+y+"、"+z+"和:"+sum+"<br/>"); } ????sum(5,8,3); ????//下面一行會報錯 ????sum(7,1,4); </script> </head> <body> </body> </html>難道是因為函數名字與變量名字不能相同?但應該是可以的吧
查看完整描述

4 回答

已采納
?
Caballarii

TA貢獻1123條經驗 獲得超629個贊

js中函數也是變量,sum原來是個函數,但執行一次以后,sum被賦值x+y+z,變成了一個數值型變量,所以再把它當函數用就報錯了。

查看完整回答
1 反對 回復 2016-02-22
  • 我吃炸土豆
    我吃炸土豆
    我試了,確實改了里面的變量名就行了。但是不太科學啊,不區分函數和變量,難道調用函數的時候可以不加括號哈
  • Caballarii
    Caballarii
    函數名不加括號就只是一個變量,可以賦值,比如function sum(){}, 你可以用var sum1=sum;這樣就可以用sum1()來調用函數
  • 我吃炸土豆
    我吃炸土豆
    ...這也太隨意了,可以賦值,又不能調用。因為可以像sum;調用的時候,又和變量定義混淆了
點擊展開后面2
?
ruibin

TA貢獻358條經驗 獲得超213個贊

你最主要問題是沒有搞清楚什么是局部變量,什么是全局變量。什么時候創建的變量是局部變量,什么時候創建的是全局變量。這個問題的核心是:在函數內部如果我們穿件變量時不使用var,并且這個變量不是參數,那么這個創建的變量會成為全局變量。而這個函數其實就相當于var sum = function(){};你在內部創建一個全局變量,就相當于把這里的var sum 賦值為

x + y +z了。所以這并不是隨意不隨意的問題。

查看完整回答
1 反對 回復 2016-02-22
  • ruibin
    ruibin
    這里并不是指針,js中沒有就不存在指針這個概念。在java中你可以不聲明就使用變量?這里卻可以,但是不聲明的結果就是全局變量。
  • ruibin
    ruibin
    不加var會引起很多問題,特別是框架里面,很多會直接報錯。嚴格模式也是不允許的,在非嚴格模式下,使用(注意這里是使用)為聲明的變量會報Reference Error
  • 我吃炸土豆
    我吃炸土豆
    誰知道他內部有沒有用指針?java還自稱沒有指針呢,我也不是說我用java/c的思想來看待js就有多正確。只是以前沒有接觸過這種弱類型的語言,難免思維遷移,理解出錯嘛
點擊展開后面4
?
merry_離

TA貢獻2條經驗 獲得超0個贊

確切的說是同一作用域函數名和變量名不能相同的,你這么寫,sum函數的執行過程中,把sum重新指向?

x?+?y?+z;
原來的sum這個時候已經變成了x+y+z;
function?sum(x,?y,?z)?{
???	var?sum?=?x?+?y?+z;
??document.write(x+"、"+y+"、"+z+"和:"+sum+"<br/>");
}
????sum(5,8,3);
????sum(7,1,4);

如果在function sum() 里面再申明一個sum 并且沒有變量提升,就可以避免沖突。

查看完整回答
反對 回復 2016-02-24
  • 我吃炸土豆
    我吃炸土豆
    問題的關鍵是,為什么變量名和函數名會沖突
  • ruibin
    ruibin
    js是弱類型語言!函數名也可以說是變量名。function sum() {}和 var sum = function() {}如果不考慮聲明提前那么他們兩個是完全一樣的,所以現在有些js書寫規范建議只寫成var sum = function() {}這種形式,而不寫成function sum() {}這種形式,就是為了方便其他語言轉來學習js的程序員。
  • 4 回答
  • 0 關注
  • 2238 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號