函数作用域以及块级作用域

var j=20;
console.log(i);//undefined
console.log(j);//20
for( var i=0;i<3;i++){
var j=10;
console.log(j);//10
}
console.log(j);//10
console.log(i);//3


console.log(z)//undefined
while(true){
var z = 10;
break;
}


console.log(z)//10

从上述代码的实验中便能证明js中用var声明不存在块级作用域,只有函数作用域,因此无论是for循环中还是while循环中用var定义的变量都是全局变量。

想要有块级作用域就得用let来声明。

另外while循环中必需要有循环条件,空不能执行(报错),false,0,"",null,undefined为false

还有两个小知识

1.声明或者调用时对象的属性名会被强制转换成字符串类型

var sample = {
1 : "abc",
5 : 100
};


console.log("sample 5 is: " + sample[5]);
console.log("sample 5 is: " + sample["5"]);

通过这段代码实验便能得知

2.在数组中字符串则必须加上"",否则便会报错,因为在数组中是所有类型都可以存入的,所以数组中不存在自动转换成字符串类型,需要手动加上""

var arr=[a,b,c]//像这样便会报错

必须加上""

var arr=["a","b","c"]

这是两个新手可能犯的小错误,在此写下

原文地址:https://www.cnblogs.com/yzxyzx/p/12640763.html