<!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在浏览器运行时的作用域
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 第一阶段 linux系统初讲 1.9运行级别 查看当前运行界别: runlevel 运行级别说明: 如果需要...
- html+css 1.关于Lorem ipsum链接 Lorem ipsum dolor sit amet, co...