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