Javascript没有块级作用域(let 和var)
2014-07-03 11:30
411 查看
在java,c中,如果一个变量在一个代码块中声明定义,那么跳出这个代码块是不能使用的。
如:
for(int i=0;i<10;i++){
System.out.println(i); //输出0-9
}
System.out.println(i); //此处i没有定义,会报错
但是,在Javascript中,在for中定义的var i, 跳出这个for循环还是能使用的。
for(var i=0;i<10;i++){
document.write(i); //输出0-9
}
document.write(i); //输出10
通过var声明的变量在它们所声明的函数内时钟是存在,但直到代码执行到var语句时才初始化变量。也就是说,变量是存在,但在Var语句执行之前它的值是undefined.
var name;
document.write(name); //undefined
document.write(myName); //同样是undefined,除非被赋值了,不然var声明可以放在任何地方
var myName;
let和var类似,如果在let语句之前使用这个变量(与let语句在同一个块作用域内),变量是存在的,但值是undefined.不过,与var不同的是,let在声明循环变量时,这个问题是不存在的,语法上不允许在初始化之前就使用这个变量。
o={x:1,y:2};
for(let p in o) console.log(p); //输出x和y
for each(let v in o) console.log(v); //输出1和2
console.log(p); //引用错误,P没有定义
如:
for(int i=0;i<10;i++){
System.out.println(i); //输出0-9
}
System.out.println(i); //此处i没有定义,会报错
但是,在Javascript中,在for中定义的var i, 跳出这个for循环还是能使用的。
for(var i=0;i<10;i++){
document.write(i); //输出0-9
}
document.write(i); //输出10
通过var声明的变量在它们所声明的函数内时钟是存在,但直到代码执行到var语句时才初始化变量。也就是说,变量是存在,但在Var语句执行之前它的值是undefined.
var name;
document.write(name); //undefined
document.write(myName); //同样是undefined,除非被赋值了,不然var声明可以放在任何地方
var myName;
let和var类似,如果在let语句之前使用这个变量(与let语句在同一个块作用域内),变量是存在的,但值是undefined.不过,与var不同的是,let在声明循环变量时,这个问题是不存在的,语法上不允许在初始化之前就使用这个变量。
o={x:1,y:2};
for(let p in o) console.log(p); //输出x和y
for each(let v in o) console.log(v); //输出1和2
console.log(p); //引用错误,P没有定义
相关文章推荐
- JavaScript的作用;JS常见的三种对话框;==和===的区别;函数内部参数数组arguments在函数内部打印实参;JS的误区:没有块级作用域
- JavaScript中没有块级作用域程序举例例证
- javascript 延长作用域链 与没有块级作用域
- JavaScript易错点:没有块级作用域
- javascript控制let作用域
- javascript_利用闭包模仿块级作用域
- 关于JavaScript中没有块级作用域的理解
- javascript中var的作用
- javascript中变量没有块级作用域---函数内申明的变量在整个函数中都有效!
- JavaScript匿名函数之模仿块级作用域
- javascript 没有块级作用域 JavaScript声明全局变量三种方式 及
- JavaScript的作用域和块级作用域概念理解
- [JavaScript]使用块级作用域声明对象时要注意的一个问题
- javascript定义变量时,有var和没有var的区别
- JavaScript没有块级作用域
- javascript没有块级作用域
- Javascript中模仿块级作用域
- javascript中的var定义的变量和没有var定义变量的区别
- javascript定义变量时有var和没有var的区别探讨
- Javascript中没有块级作用域(模仿)