JS基础-变量作用域

1,017 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第31天点击查看活动详情

var作用域

在JavaScript中,var定义变量实际是有作用域的。 假设在函数体中声明,则在函数体外不可以使用~(闭包)

function xitu(){
    var x=1;
    x=x+1;
}
x=x+2; //Uncaught ReferenceError: x is not defined
  • 如果两个函数使用了相同的变量名

  • 内部函数可以访问外部函数的成员,但外部函数不能调用内部函数

  • 如果使两个相同函数名

	function xitu(){
		    var x=1;
		    function xitu2(){
				var x='A';
				console.log('inner'+x);
			}
			console.log('outer'+x);
			xitu2()
		}
		xitu()

QQ截图20220525002118.png

  • 假设JavaScript中函数查找变量从自身函数开始~,由内向外查找,假设外部存在这个同名的函数变量,则内部函数会屏蔽外部函数的变量

提升变量的作用域

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

结果:x undefined 说明:js执行引擎,自动提高了y的作用域但是不会被赋值

function xitu2(){
    var y;
    var x="x"+y;
    console.log(x);
     y='y';
}
  • 这个是在JavaScript建立之初就存在的特性,养成习惯,所有的变量声明都放在最前面,便于代码维护。 var x,a,b...;

全局函数

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

QQ截图20220525003340.png 全局对象 window

var x='xxx';
alert(x);
alert(window.x);
  • 默认所有的全局变量,都会自动绑定在window对象里
  • alert()这个函数本身也是一个window变量
  • JavaScript实际上只有一个全局作用域,如何变量(函数也可以视为变量),假设没有在函数作用范围内找到,就会向外查找,如果在全局作用域都没有找到,就会报错refrenceError

规范

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

定义唯一的全局变量

var xitu={};
xitu.name="xitujuejing"
xitu.add=function(a,b){
return a+b;}
  • 把自己的代码全部放在自己定义的唯一空间名字中,降低全局变量冲突的问题
  • jQuery.==${}

局部作用域let

function aaa(){
for(var i =0;i<100;i++){
console.log(i)
}
    console.log(i+1); //这个i还是可以使用
    }    
  • let关键字,解决局部作用域冲突问题
  • 建议大家使用let来定于局部变量

常量const

const PI='3.14';
console.log(PI);
PI='123' 
  • 会报错PI已经被常量定义无法被修改