首先要理解js中作用域的概念
作用域:指的是乙個變數的作用範圍
1.全域性作用域
直接寫在script中的js**,在js中,萬物皆物件,都在全域性作用域,全域性作用域在頁面開啟時建立,在全域性作用域中有乙個全域性物件window,它代表是乙個瀏覽器的視窗
它由瀏覽器建立可以直接使用,在全域性作用域中,建立的物件都可以都可以作為window物件的屬性儲存,在任何地方都可以呼叫
2.函式作用域
呼叫函式時建立函式作用域,函式執行完畢後,函式作用域銷毀,每呼叫一次函式會建立乙個新的函式作用域他們之間是相互獨立的,函式中可以訪問到全域性作用域的變數,反之不行。當在函式作用域中操作物件,如果有,則使用,如果沒有則向其上乙個作用域(不是指的是全域性作用域)找,直到找到全域性作用域無論在那個作用域,都有變數宣告提前現象,在函式中不用var宣告的變數都會設定為全域性變數,形參相當於在函式作用域裡宣告變數
var定義的變數可被更改,如果不初始化而直接使用也不會報錯,var宣告的變數會得到提公升,其餘兩個不存在這種情況,即必須先宣告再賦值
let定義的變數和var類似,但作用域在當前宣告的範圍內
const定義的變數只可初始化一次且作用域內不可被更改,使用前必須初始化
js和其他語言一樣,都要經歷編譯和執行階段。而js在編譯階段的時候,會蒐集所有的變數宣告並且提前宣告變數,而不會改變其他語句的順序,因此,在編譯階段的時候,第一步就已經執行了,而第二步則是在執行階段執行到該語句的時候才執行
var即可用於函式外,亦可用於函式內,這就涉及到全域性變數與區域性變數的問題,
全域性變數如何宣告:
在函式外宣告的變數就是全域性變數,反之,在函式內宣告的變數就是區域性變數,
作用域:全域性變數無論在函式內,還是函式外,都可訪問到;
區域性變數只能在函式內有效,函式外部訪問不到該變數及說對應的變數值
let作用域:只在let命令所在的**塊內({})有效
const
1、const宣告乙個唯讀的常量。一旦宣告,常量的值就不能改變。
const pi = 3.1415;
pi=3;//vm33690:1 uncaught typeerror: assignment to constant variable.
2、const宣告的變數不得改變值,這意味著,const一旦宣告變數,就必須立即初始化,不能留到以後賦值。
const foo;//vm35236:1 uncaught syntaxerror: missing initializer in const declaration
3、const的作用域與let命令相同:只在宣告所在的塊級作用域內有效。
區別:1、var可以先使用,後宣告;let必須先宣告後使用。
2、暫時性死區:只要塊級作用域內存在let命令,它所宣告的變數就「繫結」(binding)這個區域, 不再受外部的影響。
3、var是允許在相同作用域內重複宣告同乙個變數的,而let與const不允許這一現象。
js中的this理解
this看起來理解很簡單,就是當前物件,那麼在使用的時候,經常會犯錯誤,確定不了this指向是哪個物件。在函式裡面 function person this.name name var p new person 那麼此時this指向的就是這個p物件 ajax 裡面的this指的就是ajax物件。看起...
理解JS中的this
this是函式執行時自動生成的內部物件,this指的就是呼叫函式的那個物件。函式呼叫的情況 作為函式的呼叫 var x 0 function log log 0 這裡的this就是window作為方法的呼叫 function log var obj obj.x 0 obj.log log obj.l...
JS 理解JS中的物件
物件是object資料型別的值 物件是一組沒有特定順序的值 其中每個值都有乙個名字,從而,物件看起來就像是一組名值對。建立並定義物件的方法 1.var person new object person.name carolina person.age 29 person.job dream pers...