在 JavaScript 中建立變量一般稱爲"聲明"變量。javascript
1、咱們使用 var 關鍵詞來聲明變量:java
變量聲明以後,該變量是空的,其值其實是 undefined。函數
如需向變量賦值,請使用等號:this
不過,您也能夠在聲明變量時對其賦值:spa
function varTest() { var x = 1; if (true) { var x = 2; // 一樣的變量! console.log(x); // 2 } console.log(x); // 2 } function letTest() { let x = 1; if (true) { let x = 2; // 不一樣的變量 console.log(x); // 2 } console.log(x); // 1 }
若是從新聲明 JavaScript 變量,該變量的值不會丟失:code
在如下兩條語句執行後,變量 carname 的值依然是 "Volvo":對象
名字解析順序blog
javascript中一個名字(name)以四種方式進入做用域(scope),其優先級順序以下:
一、語言內置:全部的做用域中都有 this 和 arguments 關鍵字
二、形式參數:函數的參數在函數做用域中都是有效的
三、函數聲明:形如function foo() {}
四、變量聲明:形如var bar;ip
名字聲明的優先級如上所示,也就是說若是一個變量的名字與函數的名字相同,那麼函數的名字會覆蓋變量的名字,不管其在代碼中的順序如何。但名字的初始化倒是按其在代碼中書寫的順序進行的,不受以上優先級的影響作用域
javascript是沒有塊級做用域的。函數是JavaScript中惟一擁有自身做用域的結構。
var
v =
"hello"
;
if
(
true
){
console.log(v);
var
v =
"world"
;
}
var
v =
"hello"
;
(
function
(){
console.log(v);
var
v =
"world"
;
})();
Javascript聲明變量的時候,雖然用var關鍵字聲明和不用關鍵字聲明,不少時候運行並無問題,可是這兩種方式仍是有區別的。
例一:
<script type="text/javascript">
var scope="global";
function t(){
var scope;
console.log(scope);
scope="local";
console.log(scope);
}
t();
console.log(scope);
</script>
輸出結果爲:
總結:var聲明的變量在函數內部屬於局部變量,不會改變全局變量的值。
若是改成:
<script type="text/javascript">
var scope="global";
function t(){
console.log(scope);
scope="local";
console.log(scope);
}
t();
console.log(scope);
</script>
那麼輸出結果變爲:
總結:沒有用var聲明的變量都是全局變量,並且是頂層對象的屬性。(變量提高只是聲明提高,賦值不會提高)