建设网站服务器自营方式的特点,牙科医院网站建设方案,山西太原发现4例阳性,wordpress 粘贴板图片JS中的变量作用域
背景#xff1a;
之前做js逆向的时候#xff0c;有一个网站很有意思#xff0c;就是先出现对其赋值#xff0c;但是后来的变量赋值没有对其发生修改#xff0c;决定说一下js中的作用域问题.
全局作用域#xff1a;
全局作用域的变量可以在任何…JS中的变量作用域
背景
之前做js逆向的时候有一个网站很有意思就是先出现对其赋值但是后来的变量赋值没有对其发生修改决定说一下js中的作用域问题.
全局作用域
全局作用域的变量可以在任何位置都进行修改定义在最外面或者未定义的变量都称为全局变量。window对象调用全局对象举个例子给大家理解 我们想想不加var有什么变化吗没变化 var name111
function setname(){name122;
}
setname();
console.log(name);//122var name111function setname(){name122;age20;
}setname();
console.log(name);//122
console.log(age);//20解释一下吧因为age没有使用varage进行定义所有相当于全局变量了。
函数作用域
函数定义内部的变量无法被外部访问到。
function example() {if (true) {var y 20;console.log(y);//20}console.log(y);//20
}
example();深刻理解函数作用域指的是函数内部都可以使用var声明的变量具有函数作用域而不是块级作用域
块级作用域
块级作用域是指由一对花括号{}包围的代码块它可以用来限定变量的作用范围。在块级作用域内声明的变量只在该作用域内部可见外部作用域无法访问多出现在if,switch语句中。
function example() {if (true) {let x 10; // 块级作用域内的变量console.log(x); // 输出 10}console.log(x); // 报错x未定义
}//使用let关键字声明的变量具有块级作用域只在声明的块内部有效function example() {if (true) {const y 20; // 块级作用域内的常量console.log(y); // 输出 20}console.log(y); // 报错y未定义
}varletconst
它的作用范围限定在if语句的块级作用域内
使用let关键字声明的变量具有块级作用域只在声明的块内部有效const关键字声明的常量也具有块级作用域。
声明提升
console.log(a);//undefined
var a 2;错误想法因为a没有在输出前定义所以是undefined
其实编译的时候是这样
var a;
console.log(a);
a 2;相当于 var a2 相当于 var a a2 ;
立即执行函数
(function(){...}()) //括号在内部两者功能一样
(function(){...}) ()
var 与 let
var允许重复声明而let不允许重复声明
console.log(1111111111111)
var a 12
console.log(a) //12
var a 13
console.log(a)//13注意浏览器会建议let是否重复声明如果重复声明则代码都不执行。
console.log(1111111111111)
let a 12
console.log(a)//SyntaxError: Identifier a has already been declared
let a 13
console.log(a)