• 请不要在回答技术问题时复制粘贴 AI 生成的内容
yantianqi
V2EX  ›  程序员

javascript 中 self

  •  
  •   yantianqi · Aug 16, 2017 · 3413 views
    This topic created in 3367 days ago, the information mentioned may be changed or developed.

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

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

    他们偶尔相等,仅仅是个巧合
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2905 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 12:39 · PVG 20:39 · LAX 04:39 · JFK 07:39
    ♥ Do have faith in what you're doing.