javascript 中 self

2017-08-16 11:42:01 +08:00
 yantianqi

javascript 中还有个self?
this有什么区别

2730 次点击
所在节点    程序员
15 条回复
SuperMild
2017-08-16 11:44:35 +08:00
JS 没有 self。那个 self 只是普通变量。
murmur
2017-08-16 11:45:50 +08:00
一般约定是 let self = this
yantianqi
2017-08-16 11:53:06 +08:00
```javascript
var root = typeof self == 'object' && self.self === self && self ||
typeof global == 'object' && global.global === global && global ||
this;
```
xiadd
2017-08-16 11:57:31 +08:00
`self === window`
morethansean
2017-08-16 12:15:26 +08:00
Exceptionluo
2017-08-16 13:21:48 +08:00
全局下
self===this
self===window
Biwood
2017-08-16 13:34:29 +08:00
首先你需要把 JavaScript 这门语言,跟浏览器中的 DOM 结构这两个概念区分来看。在浏览器环境里面有个全局变量 window.self,指向当前浏览器窗口的全局环境 window,window.self === window 返回 true,这是一个循环引用。
zenxds
2017-08-16 14:03:26 +08:00
写了这么多年 JS,根本没用过 self
murmur
2017-08-16 14:04:48 +08:00
@zenxds 同,window 除了判断变量有没有的时候基本都被遗忘了
autoxbc
2017-08-16 14:08:29 +08:00
@zenxds #8 后端?前端从来不写 iframe 判断?无法想象。
nullcc
2017-08-16 14:19:04 +08:00
js 的 self 根本不是语言层面的东西,说浏览器的也是够了,那只是浏览器自己设置的一个全局变量
flowfire
2017-08-16 14:57:31 +08:00
@autoxbc 现在这个年代还用 iframe ? 无法想象………
autoxbc
2017-08-16 15:06:21 +08:00
@flowfire #12 帮你想一下,各大视频网站的典型外链方法就是 iframe
66beta
2017-08-16 15:08:12 +08:00
javascript 相关三大块:dom bom ECMAScript
autoxbc
2017-08-16 15:25:13 +08:00
JavaScript 作为一种语言,由 ECMA 262 标准化为 ECMAScript

ECMAScript 中的 this 指向当前环境上下文,一般是 global 对象
当在对象上的方法函数中,this 指向对象自身

当 JavaScript 访问文档时,需要通过 DOM(文档对象模型)
当访问浏览器窗口时,需要通过 BOM(浏览器对象模型)
self 是 BOM 中的对象,指向当前窗口

所以按理说 this 和 self 是完全没有交集的,但是在浏览器的实现中
window 既是全局对象 global 的实做,也是 BOM 主体对象的实做

所以出现了诡异的 this === window === self

但是作为 this 的 window 是给函数中的语句提供上下文的
作为 self 的 window 是给操作浏览器提供接口的

他们偶尔相等,仅仅是个巧合

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/383337

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX