let宣告的全域变数,不再是全域属性惹??

用var令全域变数

var i='全域变数';
    let obj={
        i:'obj内变数 obj属性',
	    fun:function (){
					console.log(i)
					console.log(this)
          console.log(this.i)}
        
    }
obj.fun();
console.log('.......................................')
let aNewFunction = obj.fun;
aNewFunction();

结果

全域变数
{i: 'obj内变数 obj属性', fun: ƒ}
obj内变数 obj属性
.......................................
全域变数
Window {window: Window, self: Window, document: document, name: '', location: Location, …}
全域变数

用let令全域变数

let i='全域变数';
    let obj={
        i:'obj内变数 obj属性',
	    fun:function (){
					console.log(i)
					console.log(this)
          console.log(this.i)}
        
    }
obj.fun();
console.log('.......................................')
let aNewFunction = obj.fun;
aNewFunction();

结果

全域变数
{i: 'obj内变数 obj属性', fun: ƒ}
obj内变数 obj属性
.......................................
全域变数
Window {window: Window, self: Window, document: document, name: '', location: Location, …}
undefined

分析

用最单纯的方式直接呼叫fuction,在没有严格模式的状况下,this如我们所预期是:window object。

window object的属性i照理来说,就会是window object的变数,也就是全域变数。

全域变数的变数有效范围是全域的,所以不会有「不在有效范围所以是undefined的问题」
我们可以从obj.fun();得出的结果的确是:全域变数,得证。

但他今天说,用let宣告的全域变数,不会是全域属性。
换句话说,我不可以透过window这个全域物件,存取他的属性,来得到用let宣告的全域变数。
所以我们在aNewFunction();得到undefined的答案,符合预期。


<<:  【day12】连续上班日做便当

>>:  Day12-旧网站重写成Vue_3_单一图片轮播

Day 9 - 解密 Order API 回传的 Message 字串

图 9-1: 测试建立订单 接续 Day 8 使用 Order API 建立测试订单後,返回结果是...

每个人都该学的30个Python技巧|技巧 11:回圈二部曲—while回圈(字幕、衬乐、练习)

昨天教完了第一种回圈,也就是for回圈,那今天当然就要讲第二种罗。while回圈的条件式通常都会是关...

[DAY 14] _最小系统板规划

我在第2天的时候说了如何做自己的开发板,今天来说最小系统板的规划吧,会做开发板後做最小系统板只需要好...

Day10 日志管理工具 - Logrotate (Linux)

随着时间资料累积久都会有占空间与查询不易的问题,在Mysql的日志中常用的error log 和 s...

30天Python自学:Day02

#以下内容皆由初学者撰写,有错误可能,不建议尽信 30天Python自学: Day02 Python...