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