在 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声明的变量都是全局变量,并且是顶层对象的属性。(变量提高只是声明提高,赋值不会提高)