变量声明
js 中变量声明时使用 var , let 或 const 其中之一进行修饰。虽然变量声明时可以不加修饰词,但不推荐这种写法。
关键字 | 含义 |
---|---|
const | 声明一个块作用域的只读的常量,声明时必须被初始化 |
var | 定义全局变量 |
let | 声明一个块作用域的局部变量 |
所谓的全局变量实际上是全局对象的属性。在网页中,默认的全局对象是 window
。
当使用 var 在代码块中修改变量时,会出现如下问题:
function test() {
var a = "x";
console.log("xx")
}
for(var i=0;i<=1000;i++){
var sum=0;
sum+=i;
}
test();
console.log(a);//此句会报错,因为 a 定义在函数中
console.log(sum+","+i); // 此句会正常返回 for 循环中定义的 i 与 sum
这是因为 js 中的变量作用域是函数域而不是块级域,因此在函数内部声明的变量外界无法使用,但在代码块中声明的变量外界可以使用。
let 可以使变量的作用域仅限在最内层的代码块中。如只需要将上面的 for 循环修改如下:
for(let i=0;i<=1000;i++){
let sum=0;// 使用 let 修饰变量
sum+=i;
}
外界在使用 sum 变量时就会出错。
变量作用域
-
在所有函数之外声明的变量,叫做全局变量,因为它可被当前文档中的任何其他代码所访问
-
在函数内部声明的变量,叫做局部变量,因为它只能在该函数内部访问。
-
let 修饰符定义了语句块中的局部变量。
for in
遍历对象内部的所有属性,不包括其原型中的。它只作用于对象。
var obj = {
"name":"haha",
"age":18
};
for (var p in obj) {
alert(p); //会依次弹出 name age。并不是 haha 与 18
};
with
将代码块的作用域设置到一个特定的对象中。它只作用于对象中。
var obj = {
"name":"haha",
"age":18
};
with(obj){//将代码块的作用域设置到 obj 对象中,所以可以直接使用属性名表示 obj 对象中的同名的属性
var a = name;
var b = age;
};
alert(a+b);
上面的 with 语句代码块相当于下面的语句:
var obj = {
"name":"haha",
"age":18
};
var a = obj.name;
var b = obj.age;
alert(a+b);
with 语句可以简写掉调用某一个对象属性前的 "obj."。
网友评论