js变量的作用域

js变量的作用域

在js中,var定义的变量是有作用域的。

假设在函数体中声明,则在函数体外不可以使用

function f(){
    var x = 1;
    x = x + 1;
}
x = x + 2; //uncaught ReferenceError:x is not defined

如果两个函数使用了相同的变量名,只要在函数内部,就不会冲突

function f1(){
    var x = 1;
    x = x + 1; 
}
function f2(){
    var x = 1;
    x = x + 1; 
}

内部函数可以访问外部函数的成员,反过来就不行

function f1(){
    var x = 1;
    function f2(){
        var y = x + 1;
    }
    var z = y + 1; //Uncaught ReferenceError:y is not defined
}

假设内部函数和外部函数的变量名重名

由内向外查找,假设外部存在这个同名的函数变量,则内部函数会屏蔽外部函数的变量

function f1(){
    var x = 1;
    function f2(){
        var x = "A";
        console.log("inner"+x);
    }
    f2();
    console.log("outer"+x);
}
f1();

提升变量的作用域 建议将变量申明全放在函数首端

function f(){
	var x = "x" + y;
	console.log(x);
	var y = 'y';
}
function f(){
	var y;
    var x = "x" + y;
	console.log(x);
	y = 'y';
}

全局

"use strict"
let x = 1;

function f(){
    console.log(x);
}
f();
console.log(x);

默认所有的全局变量绑定在window上

alert()函数本身也是window对象之一,如果被覆盖就会失效

规范

由于我们所有的全局变量都会绑定到我们的window上,如果不同的js文件,使用了相同的全局变量,如何减少冲突?

将自己的代码全部放入自己定义的唯一空间名字中,降低全局命名冲突的问题

JQuery

局部

let关键字 解决局部作用域冲突的问题

常量 const

const PI = "3.14";
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值