關於定義變數時使用關鍵字var與否的區別,總結一下。
在函數內部,有var和沒var宣告的變數是不一樣的。有var聲明的是局部變量,沒var的,宣告的全域變量,所以可以藉此向外暴露介面東東。
使用var語句重複宣告語句是合法且無害的。如果重複聲明且帶有賦值,那麼就和一般的賦值語句沒差別。如果嘗試讀取沒有宣告過的變量,Js會報錯。
JavaScript的函數作用域內,宣告的變數或內部函數,在函數體內都是可見的。意味著,函數在定義之前可能已經可用。函數定義有兩種方式,一種是函數定義表達式,一種是函數宣告語句。
函數宣告語句「被提前」到外部腳本或外部函數作用域的頂部,所以以這種方式宣告的函數,可以被再它定義之前出現的程式碼所呼叫。而函數定義表達式中,變數的宣告被提前了,但是給變數的賦值是不會提前的,所以,以表達式定義的函數在函數定義之前無法呼叫。
1.在函數作用域內 加var定義的變數是局部變量,不加var定義的就成了全域變數。
使用var定義:
var a = 'hello World'; function bb(){ var a = 'hello Bill'; console.log(a); } bb() //'hello Bill' console.log(a); //'hello world'
不使用var定義:
var a = 'hello World'; function bb(){ a = 'hello Bill'; console.log(a); } bb() //'hello Bill' console.log(a); //'hello Bill'
2.在全域作用域下,使用var定義的變數不可以delete,沒有var 定義的變數可以delete.也就說明隱含全域變數嚴格來說不是真正的變量,而是全域物件的屬性,因為屬性可以透過delete刪除,而變數不可以。
3.使用var 定義變數也會提升變數聲明,即
使用var定義:
function hh(){ console.log(a); var a = 'hello world'; } hh() //undefined
不使用var定義:
function hh(){ console.log(a); a = 'hello world'; } hh() //'a is not defined'
這就是使用var定義的變數的宣告提前。
4.在ES5的'use strict'模式下,如果變數沒有使用var定義,就會報錯。
以上是如何區別javaScript中定義變數有沒有var的區別實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!