javascript 中还有个self
?
和this
有什么区别
1
SuperMild 2017-08-16 11:44:35 +08:00 1
JS 没有 self。那个 self 只是普通变量。
|
2
murmur 2017-08-16 11:45:50 +08:00
一般约定是 let self = this
|
3
yantianqi OP ```javascript
var root = typeof self == 'object' && self.self === self && self || typeof global == 'object' && global.global === global && global || this; ``` |
4
xiadd 2017-08-16 11:57:31 +08:00
`self === window`
|
5
morethansean 2017-08-16 12:15:26 +08:00
|
6
Exceptionluo 2017-08-16 13:21:48 +08:00
全局下
self===this self===window |
7
Biwood 2017-08-16 13:34:29 +08:00
首先你需要把 JavaScript 这门语言,跟浏览器中的 DOM 结构这两个概念区分来看。在浏览器环境里面有个全局变量 window.self,指向当前浏览器窗口的全局环境 window,window.self === window 返回 true,这是一个循环引用。
|
8
zenxds 2017-08-16 14:03:26 +08:00
写了这么多年 JS,根本没用过 self
|
11
nullcc 2017-08-16 14:19:04 +08:00
js 的 self 根本不是语言层面的东西,说浏览器的也是够了,那只是浏览器自己设置的一个全局变量
|
14
66beta 2017-08-16 15:08:12 +08:00
javascript 相关三大块:dom bom ECMAScript
|
15
autoxbc 2017-08-16 15:25:13 +08:00 1
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 是给操作浏览器提供接口的 他们偶尔相等,仅仅是个巧合 |