V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yantianqi
V2EX  ›  程序员

javascript 中 self

  •  
  •   yantianqi · 2017-08-16 11:42:01 +08:00 · 2647 次点击
    这是一个创建于 2443 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    15 条回复    2017-08-16 15:25:13 +08:00
    SuperMild
        1
    SuperMild  
       2017-08-16 11:44:35 +08:00   ❤️ 1
    JS 没有 self。那个 self 只是普通变量。
    murmur
        2
    murmur  
       2017-08-16 11:45:50 +08:00
    一般约定是 let self = this
    yantianqi
        3
    yantianqi  
    OP
       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
        4
    xiadd  
       2017-08-16 11:57:31 +08:00
    `self === window`
    Exceptionluo
        6
    Exceptionluo  
       2017-08-16 13:21:48 +08:00
    全局下
    self===this
    self===window
    Biwood
        7
    Biwood  
       2017-08-16 13:34:29 +08:00
    首先你需要把 JavaScript 这门语言,跟浏览器中的 DOM 结构这两个概念区分来看。在浏览器环境里面有个全局变量 window.self,指向当前浏览器窗口的全局环境 window,window.self === window 返回 true,这是一个循环引用。
    zenxds
        8
    zenxds  
       2017-08-16 14:03:26 +08:00
    写了这么多年 JS,根本没用过 self
    murmur
        9
    murmur  
       2017-08-16 14:04:48 +08:00
    @zenxds 同,window 除了判断变量有没有的时候基本都被遗忘了
    autoxbc
        10
    autoxbc  
       2017-08-16 14:08:29 +08:00
    @zenxds #8 后端?前端从来不写 iframe 判断?无法想象。
    nullcc
        11
    nullcc  
       2017-08-16 14:19:04 +08:00
    js 的 self 根本不是语言层面的东西,说浏览器的也是够了,那只是浏览器自己设置的一个全局变量
    flowfire
        12
    flowfire  
       2017-08-16 14:57:31 +08:00
    @autoxbc 现在这个年代还用 iframe ? 无法想象………
    autoxbc
        13
    autoxbc  
       2017-08-16 15:06:21 +08:00
    @flowfire #12 帮你想一下,各大视频网站的典型外链方法就是 iframe
    66beta
        14
    66beta  
       2017-08-16 15:08:12 +08:00
    javascript 相关三大块:dom bom ECMAScript
    autoxbc
        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 是给操作浏览器提供接口的

    他们偶尔相等,仅仅是个巧合
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3144 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 15:00 · PVG 23:00 · LAX 08:00 · JFK 11:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.