摘要:語句返回值在瀏覽器內(nèi)直接寫代碼,每條語句之后都會有返回值,如下關于為什么語句都有返回值,其實里面每條語句都有返回值,你只是沒有在意。我覺得,只要知道每條語句都是有返回值的就足夠了。
好久不寫博客了,主要因為忙于找實習,以及沉迷看書。其實如果時間不忙,有好多技術博客想分享。
問題可以試著執(zhí)行如下語句:
var a = 1; ++a++; //ReferenceError
沒錯,會報錯。請允許我先寫兩個簡單的知識點,再寫具體原因。
優(yōu)先級后置++的優(yōu)先級大于前置++優(yōu)先級,這就是語法規(guī)則。
語句返回值在瀏覽器內(nèi)直接寫代碼,每條語句之后都會有返回值,如下:
關于為什么var語句都有返回值,其實JavaScript里面每條語句都有返回值,你只是沒有在意。我覺得,只要知道每條語句都是有返回值的就足夠了。另外規(guī)范中定義,a = b這種賦值語句,返回值是后者,我以前的文章中,在文章最后有證明的代碼。
原因好了,趕緊說原因。
優(yōu)先級,后置++高,先執(zhí)行a++,你也看到了上面的圖片,a++會返回一個數(shù),就是1。
那么之后就是執(zhí)行++1,這就是報錯的根本原因。
當你嘗試引用一個未被定義的變量時,將會拋出一個 ReferenceError 。
++1執(zhí)行時,會把1看成是一個變量,自然1沒被聲明過,而且1根本就是一個數(shù)值類型數(shù)據(jù),根本不是變量,因此報錯。
大一時候,學C語言,b = a++ ;是怎么執(zhí)行的呢?
我的C語言老師說,先執(zhí)行b = a ; 然后a++;
坑??!真的坑??!
其實,b = a++;就是先執(zhí)行a++,此時就是a已經(jīng)加上一了,只不過為什么賦值后,b的值仍舊是之前未加一的a,是因為a++的返回值就是之前的a。
因此,a++就是一步執(zhí)行完的,絕不是先b等于之前的a。
我在Java下測試過,這個報錯原因也是可以用上面這個原因分析的。
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/107998.html
摘要:能知道為什么這樣嗎注意后面的,可以發(fā)現(xiàn)最后一個括號不論是加不加后置自增,計算結果一樣,但是最后的值改變了 var i= 5; var j = 5; var p = (i++)+(i++)+(i++); var q = (++j)+(++j)+(++j); document.write(i+); // 8 ...
摘要:類所實現(xiàn)的方法包裝了對被代理對象的反射調(diào)用,后文中的動態(tài)代理類正是調(diào)用此方法來調(diào)用被代理對象的方法。 前言 java的設計模式中有一項設計模式叫做代理模式,所謂代理模式,就是通過代理方來操作目標對象,而不是自己直接調(diào)用。代理又分為靜態(tài)代理和動態(tài)代理,靜態(tài)代理就是針對每個被代理對象寫一個代理類,操作不夠優(yōu)雅;動態(tài)代理,可以根據(jù)接口動態(tài)的生成代理類,這動態(tài)生成的類不需要自己書寫,jdk幫你...
摘要:從本篇博客開始,我會跟大家分享下我關于前端優(yōu)化方面的學習,由于時間原因每篇博客只能分享一小點內(nèi)容,一點點深入前端優(yōu)化的細節(jié)。在前端優(yōu)化這個問題上,最被大家熟知的應該就是雅虎前端優(yōu)化條軍規(guī)以及雅虎前端優(yōu)化條規(guī)則。 從本篇博客開始,我會跟大家分享下我關于前端優(yōu)化方面的學習,由于時間原因每篇博客只能分享一小點內(nèi)容,一點點深入前端優(yōu)化的細節(jié)?! ∽鲞^前端的人都知道,前端優(yōu)化是一個永遠都不會...
閱讀 1138·2021-08-12 13:24
閱讀 2985·2019-08-30 14:16
閱讀 3310·2019-08-30 13:01
閱讀 2074·2019-08-30 11:03
閱讀 2773·2019-08-28 17:53
閱讀 3090·2019-08-26 13:50
閱讀 2270·2019-08-26 12:00
閱讀 949·2019-08-26 10:38