js自動加分號的一些問題

2021-08-19 22:19:33 字數 696 閱讀 5130

我們都知道,js在寫**的時候,在每一行最後是可以不寫分號 「;」 的,因為js會自動幫我們加上分號。不過,js的這種機制做的並不好。實際上,js並不是在每一行結尾加上分號,而是當你這行**能夠正常被解析的時候,就會在結尾加上分號,如果不能解析,則合併下一句**,直到可以解析為止。例如:

b =

上面的**會解析成:b = 1;

有這麼一種情況:當我某一行**不寫分號,而下一行**是以「(」 開頭的,即使這行語句是可解析的語句,也會將兩行**合併為一行進行解析。正是因為這種機制,所以在js中寫**的時候,會出現一些跟你意料中不一樣的結果。比如說:

a = 1

(a + 2).tostring()

上面的**我們認為它會這樣執行:

a = 1;

(a + 2).tostring();

但事實上,它是這樣執行的:

a = 1(a +2).tostring();

最終結果:uncaught referenceerror: a is not defined

當我們使用封閉函式的時候,不加分號也可能會發生這種錯誤:

var a = 1

(function(){})()

上面的的語句會這樣執行:

var a = 1(function(){})()

最終結果:uncaught typeerror: 1 is not afunction

JS變數的一些問題

es5變數提公升 變數提公升 es5 變數提公升 宣告 declare var a function sum 預設值undefined 定義 defined a 12 就是賦值操作 var 只宣告未定義 function 的宣告和賦值,定義 變數提公升只發生當前作用域 開始載入的時候只對全域性作用域...

關於JS一些驗證郵箱的一些問題

if type email w w w ig strreg a za z0 9 a za z0 9 a za z0 9 strreg 0 9a za z 0 9a za z 0 9a za z 0 9a za z strreg a za z0 9 a za z0 9 a za z0 9 a za z...

String 一些問題

前言 等號 對於基本型別,比較的是值,對於引用型別,比較的是記憶體位址。1.在物件池中建立,如果常量池中已經存在則返回常量池中已經有的。private static void test1 結果 true 2.乙個在string pool中,乙個在堆中。private static void test...