xFan
V2EX  ›  问与答

问个 js 的问题...

  •  
  •   xFan · Jul 29, 2014 · 3754 views
    This topic created in 4489 days ago, the information mentioned may be changed or developed.
    "Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。"

    http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html


    想知道这句话到底是什么意思...是不是写错了?
    18 replies  •  2014-07-29 14:19:51 +08:00
    xFan
    xFan
    OP
    Jul 29, 2014
    1
    呃..没写完全就发了..

    我想的是..函数读取全局变量..为什么会是特殊之处...

    = =# ...
    mufeng
    mufeng
    Jul 29, 2014
    2
    因为别的语言都不做这种事, 开销大
    xFan
    xFan
    OP
    Jul 29, 2014
    3
    @mufeng 恩...原来如此..谢谢谢谢..!~!~
    hellojinjie
    hellojinjie
    Jul 29, 2014
    4
    @mufeng
    @xFan
    他这句话错了。。。难道有语言不允许在函数里读取全局变量嘛?????
    NemoAlex
    NemoAlex
    Jul 29, 2014
    5
    应该是跟 Java 和 C 之类的语言比,这些语言只有“外部变量”,而没有真正意义上的全局变量。
    在浏览器中运行的 JS,通常认为 Window 是一个全局对象,Window 下的属性是全局变量。
    不过文中这句话这样说并不是很合适,好像是在强调“可以读取”一样,这是不对的。
    xFan
    xFan
    OP
    Jul 29, 2014
    6
    @hellojinjie 恩 我最开始也是你这种想法..所以来讨论一下.
    Tonni
    Tonni
    Jul 29, 2014
    7
    Javascript有两种作用域:全局作用域和局部作用域,每当调用一个函数就会生成一个局部作用于,局部作用域可以通过闭包查到到外级作用域的属性,这里的外级作用域可能是函数作用域也可能是全局作用域,而全局作用域则不能向下查找局部作用域的属性。
    jsonline
    jsonline
    Jul 29, 2014 via Android
    8
    这也是JS的坑爹之处。
    mufeng
    mufeng
    Jul 29, 2014
    9
    @hellojinjie js的全局变量, 简单暴力, 特别容易污染, 所以我说别的语言不做这个
    davepkxxx
    davepkxxx
    Jul 29, 2014
    10
    除了某些不支持全局变量的语言,我想不到有哪个做不到这一点。
    davepkxxx
    davepkxxx
    Jul 29, 2014
    11
    哦,这里说的是全局变量,和静态变量搞混了。
    clino
    clino
    Jul 29, 2014❤️2
    12
    我觉得是写错了,应该改成
    "Javascript语言的特殊之处,就在于函数内部可以直接**声明**全局变量"
    hellojinjie
    hellojinjie
    Jul 29, 2014
    13
    @clino 正解,哈哈
    clino
    clino
    Jul 29, 2014 via Android
    14
    上面写错了,应该是定义,不是声明
    NemoAlex
    NemoAlex
    Jul 29, 2014
    15
    @clino
    Javascript语言的特殊之处,就在于函数内部可以一不小心就声明全局变量
    rming
    rming
    Jul 29, 2014
    16
    @NemoAlex 怎么我也感觉是定义呢,虽然我不懂JS。。
    xFan
    xFan
    OP
    Jul 29, 2014
    17
    @clino 这个应该是正解...
    clino
    clino
    Jul 29, 2014 via Android
    18
    @NemoAlex 其实 lua 也是这样,不写 local 就会定义成全局变量
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1686 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 16:18 · PVG 00:18 · LAX 08:18 · JFK 11:18
    ♥ Do have faith in what you're doing.