JavaScript在浏览器运行时的作用域
作者:
defphot | 来源:发表于
2018-06-29 15:32 被阅读0次<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Page Title</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<script>
console.log(this); //>window...
var a = 1;
function test() {
window.console.log(a); //>undefined
var a = 2;
window.console.log(a); //>2
}
test();
//js运行环境是有一个全局命名空间
//打开浏览器窗口,浏览器会在全局创建一个window对象,对象上绑定了浏览器属性和方法(客户端运行环境)
//之后浏览器把我们的代码添加到window对象上(理因如此,我们实际上总是通过操作window对象控制浏览器的行为)
//浏览器这一默认的行为 导致我们代码的顶级作用域始终是window 我们代码(我们认为的全局变量)实际上都会挂载到window对象上
//下面语句具有等同效果:
//var a = 1 <==> window.a = 1
//function test() {} <==> let test = function() {} <==> window.test = function() {}
//所以第一次console.log打印undefined的原因是:函数局部作用域没有a,会往上到上层作用域找,但是由于前面的a是定义在window下面的,上层作用域没有a,始终会找不到。
//也可以这样理解,可以得到同样的结果。
function topScope() {
//相当于window
let myWindow = {};
//相当于 var a = 1;
myWindow.a = 1;
//相当于 function test() {...}
myWindow.test = function () {
console.log(a); //>undefined
let a = 2;
console.log(a); //>2
}
test();
}
topScope();
</script>
</body>
</html>
本文标题:JavaScript在浏览器运行时的作用域
本文链接:https://www.haomeiwen.com/subject/cyyayftx.html
网友评论