V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
xFan
V2EX  ›  问与答

问个 js 的问题...

  •  
  •   xFan · 2014-07-29 10:26:45 +08:00 · 3060 次点击
    这是一个创建于 3778 天前的主题,其中的信息可能已经有所发展或是发生改变。
    "Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。"

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


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

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

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