重点:在函数体中声明的变量,在函数体外不能使用,如果非要实现,可以研究一下闭包


假设内部变量发现里面已经有一个x的变量,他就会屏蔽外部的x变量,输出的结果也是内部的变量
//假设内部变量发现里面已经有一个x的变量,他就会屏蔽外部的x变量,输出的结果也是内部的变量
function myFunction(){
var x = 1;
function myFunction2(){
var x = ‘A‘;
console.log(‘inner ‘+x);//inner A
}
myFunction2();
console.log(‘outer ‘+x);//outer 1
}
myFunction();

重点:养成规范,所有的变量放到头部,便于维护,如下
function myFunction3(){
var x = 1,
y = x + 1,
z,i,a;//undefined
//之后随意使用
}
看到一个新的知识不要只是想记住他,而是想想他为什么这么做
定义在函数外面的是全局变量,例如


整理一个比较重要的JavaScript知识点,
JavaScript设计,将所有的全局变量绑定在windows对象中。同时JavaScript还设计使用一个变量x,会先在函数内部寻找是否定义了变量x,如果在内部没有找到定义变量x,就会再函数的外部寻找是否有定义了变量x。
特殊情况,如果内部没有找到变量x,而外部就是全局变量,从外部寻找变量x,也就是从全局变量寻找变量x,其他地方定义的全局变量x就会和函数内部的变量x产生冲突,导致产生不可控的错误。
为了降低这样的冲突,我们约定在写JavaScript时自定义一个全局变量,比如var zhao; 将自己所有要写的变量绑定在自己定义的这个全局变量上,举例,之前我们定义变量x定义为 var x; 现在我们将x定义在自己的全局变量zhao上面,也就是定义为zhao.x
这样就减少了冲突
//自己定义全局变量演示
var zhao = {};
//定义全局变量
zhao.name = "zhangsan";
zhao.add = function(x,y){
return x +y;
}
//调用全局变量
console.log("zhao.name = "+ zhao.name);//zhao.name = zhangsan
console.log("zhao.add = " + zhao.add); //zhao.add = function(x,y){
// return x +y;
//}
//之前使用var的问题,var定义的变量出了作用域还可以使用,如下
var myFunction4 = function (){
for (var i = 0; i < 10; i++) {
console.log(i);
}
console.log("作用域外测试 i = "+i);// 作用域外测试 i = 10
}
myFunction4();
//使用let局部变量,解决这个问题
var myFunction5 = function (){
for (let i = 0; i < 10; i++) {
console.log(i);
}
console.log("作用域外测试 i = "+i);// 报错 i is not defined 说明解决变量出了作用域还可以使用的问题
}
myFunction5();
所以,建议使用let定义局部变量
var PI = 3.14;
console.log(PI);//3.14
PI = 233;
console.log(PI);//233
const PI = 3.14;
console.log(PI);//3.14
PI = 233;
console.log(PI);//报错,TypeError: Assignment to constant variable,说明解决了这个问题
原文:https://www.cnblogs.com/realize00/p/14046159.html