如果不是窗口,谁会保留对变量的引用? [复制]

Posted

技术标签:

【中文标题】如果不是窗口,谁会保留对变量的引用? [复制]【英文标题】:If not window who does keep reference to the variable? [duplicate] 【发布时间】:2020-10-29 02:21:09 【问题描述】:

以下代码我以三种不同的方式运行,但只有一种可以正常运行。 我不明白为什么。如果不是窗口,你能告诉我谁会保留对变量的引用吗?

脚本:

'use strict';

let s = function();

试一试****************************************

s();

控制台:好的

尝试 2******************************************

window.s();

控制台:错误

TypeError: window.s 不是函数

尝试 3****************************************

this.s();

控制台:错误

TypeError: this.s 不是函数


【问题讨论】:

That's just how let works。它在文件的范围内,为什么它需要是某个对象的属性? 相关:Do let statements create properties on the global object?. 【参考方案1】:

let 只能在它声明的范围内可用(块的范围) 使用 var ,它在全局范围内定义一个变量 ....

试试

'use strict';
var s = function();

'use strict';

var  s = function();
// TRY 1**********************************

s();

// TRY 2**********************************

window.s();


// TRY 3**********************************

this.s();

【讨论】:

【参考方案2】:

let 不会创建 window 的属性。

就像 const 一样,当全局声明时(在最顶层范围内)MDN,let 不会创建窗口对象的属性。

【讨论】:

以上是关于如果不是窗口,谁会保留对变量的引用? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Javascript:持久化窗口对象引用?

简析clone关键字与__clone()方法

前端学PHP之面向对象系列第五篇——对象操作

JavaScript跳出iframe框架

JavaScript跳出iframe框架

ifame窗口的获取