最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javascript 運(yùn)算數(shù)的求值順序

 更新時(shí)間:2011年08月23日 22:53:05   作者:  
請(qǐng)注意,這里說(shuō)的是運(yùn)算數(shù)的求值順序。而非運(yùn)算符,運(yùn)算符的求值順序我們比較熟悉。
比如
復(fù)制代碼 代碼如下:

a * b + c;

,先算乘方,再算乘除,最后算加減
,有括號(hào),先算括號(hào)里面的,同一級(jí)運(yùn)算按照從左到右的順序依次進(jìn)行
這一點(diǎn)所有的程序設(shè)計(jì)語(yǔ)言都采取數(shù)學(xué)中數(shù)字的計(jì)算順序。當(dāng)然程序設(shè)計(jì)語(yǔ)言中還有一些不同于數(shù)學(xué)中的運(yùn)算符。那運(yùn)算數(shù)的求值順序是如何的呢?
如下
復(fù)制代碼 代碼如下:

// 求 a 和 b的和
sum = a + b;

,從內(nèi)存中取a的值
,從內(nèi)存中取b的值
,進(jìn)行相加運(yùn)算
貌似描述的很弱智,理所當(dāng)然就是這樣的。有人可能覺(jué)得先取b的值,再取a,然后相加。這樣最后的結(jié)果也是一樣的。的確是這樣。但如果運(yùn)算數(shù)是一個(gè)函數(shù)執(zhí)行呢?
sum = a + fun();
假設(shè)fun函數(shù)中僅return 一個(gè)數(shù)字。這時(shí)無(wú)論是先取a的值,再去fun執(zhí)行后的值也是無(wú)所謂的。最終的結(jié)果都一樣。說(shuō)到這里,仍然沒(méi)有新鮮,糾結(jié)的地方。
但如果fun不僅返回了數(shù)字,還改變了a呢? 比如以下JavaScript代碼
復(fù)制代碼 代碼如下:

var a = 5;
function fun(){
a = 10;
return 20;
}
var b = a + fun(); // b 的值?

fun 函數(shù)不僅返回了20,還改變了a的值。而a 正是參與相加運(yùn)算的a。這時(shí)a取 5 還是 10 參與相加運(yùn)算呢? 如果是5則b的值為25,如果是10,則b為30。JavaScript語(yǔ)言中結(jié)果是25。但C語(yǔ)言中卻是30,如下
復(fù)制代碼 代碼如下:

int a = 5;
int fun(){
a = 10;
return 20;
}
int b = a + fun(); // 30

因此,只有當(dāng)函數(shù)有副作用的時(shí)候,運(yùn)算數(shù)的求值順序不同會(huì)導(dǎo)致結(jié)果不同。很明顯,各個(gè)語(yǔ)言實(shí)現(xiàn)不同。
JavaScript語(yǔ)言中,從左到右,a取5,fun執(zhí)行后返回20,最后是 5+20。注意,雖然參與此次運(yùn)算時(shí)a取5,但a值實(shí)際上已經(jīng)改變了。如下
復(fù)制代碼 代碼如下:

var a = 5;
function fun(){
a = 10;
return 20;
}
var b = a + fun(); // b 的值?
alert(a); // 10

C語(yǔ)言中,先執(zhí)行fun,fun中改變了a的值,為10,取a為10參與本次 “加”運(yùn)算,fun返回20。結(jié)果是 10+20。
可以看到,無(wú)論是JavaScript還是C。a的值最后都改變了,為10。區(qū)別在于:參與相加運(yùn)算時(shí),JavaScript 取未被改變的值5, C取改變了的值10。
C語(yǔ)言中,運(yùn)算也是從左到右的。但當(dāng)有函數(shù)作為運(yùn)算數(shù)時(shí),會(huì)先執(zhí)行函數(shù)。而改函數(shù)如果有副作用時(shí),取被改變后的a值參與本次運(yùn)算。無(wú)論fun和a的順序。如下將fun放在前面,在C語(yǔ)言中結(jié)果仍然是30
復(fù)制代碼 代碼如下:

int a = 5;
int fun(){
a = 10;
return 20;
}
int b = fun() + a; // 30

JavaScript中如果fun與a交換了順序,則結(jié)果不是25了。
復(fù)制代碼 代碼如下:

var a = 5;
function fun(){
a = 10;
return 20;
}
var b = fun() + a; // b為30

相關(guān):
函數(shù)的副作用

相關(guān)文章

最新評(píng)論

泸溪县| 英吉沙县| 博湖县| 长海县| 大余县| 阳西县| 铜梁县| 卢龙县| 姜堰市| 揭西县| 九台市| 孝感市| 丰原市| 集安市| 梁山县| 高要市| 乌什县| 建平县| 南康市| 新丰县| 吴忠市| 汉沽区| 巴林左旗| 双鸭山市| 万年县| 彭州市| 丹巴县| 三穗县| 榕江县| 黄陵县| 达州市| 南宁市| 芜湖县| 无极县| 嘉禾县| 南乐县| 凌海市| 海南省| 舒城县| 丰台区| 临武县|