问个 js 的问题...

2014-07-29 10:26:45 +08:00
 xFan
"Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。"

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


想知道这句话到底是什么意思...是不是写错了?
2977 次点击
所在节点    问与答
18 条回复
xFan
2014-07-29 10:28:09 +08:00
呃..没写完全就发了..

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

= =# ...
mufeng
2014-07-29 10:29:03 +08:00
因为别的语言都不做这种事, 开销大
xFan
2014-07-29 10:33:00 +08:00
@mufeng 恩...原来如此..谢谢谢谢..!~!~
hellojinjie
2014-07-29 10:41:02 +08:00
@mufeng
@xFan
他这句话错了。。。难道有语言不允许在函数里读取全局变量嘛?????
NemoAlex
2014-07-29 10:51:29 +08:00
应该是跟 Java 和 C 之类的语言比,这些语言只有“外部变量”,而没有真正意义上的全局变量。
在浏览器中运行的 JS,通常认为 Window 是一个全局对象,Window 下的属性是全局变量。
不过文中这句话这样说并不是很合适,好像是在强调“可以读取”一样,这是不对的。
xFan
2014-07-29 10:53:56 +08:00
@hellojinjie 恩 我最开始也是你这种想法..所以来讨论一下.
Tonni
2014-07-29 11:11:35 +08:00
Javascript有两种作用域:全局作用域和局部作用域,每当调用一个函数就会生成一个局部作用于,局部作用域可以通过闭包查到到外级作用域的属性,这里的外级作用域可能是函数作用域也可能是全局作用域,而全局作用域则不能向下查找局部作用域的属性。
jsonline
2014-07-29 11:15:41 +08:00
这也是JS的坑爹之处。
mufeng
2014-07-29 11:22:58 +08:00
@hellojinjie js的全局变量, 简单暴力, 特别容易污染, 所以我说别的语言不做这个
davepkxxx
2014-07-29 11:26:35 +08:00
除了某些不支持全局变量的语言,我想不到有哪个做不到这一点。
davepkxxx
2014-07-29 11:27:43 +08:00
哦,这里说的是全局变量,和静态变量搞混了。
clino
2014-07-29 11:45:06 +08:00
我觉得是写错了,应该改成
"Javascript语言的特殊之处,就在于函数内部可以直接**声明**全局变量"
hellojinjie
2014-07-29 11:47:16 +08:00
@clino 正解,哈哈
clino
2014-07-29 13:07:00 +08:00
上面写错了,应该是定义,不是声明
NemoAlex
2014-07-29 13:11:56 +08:00
@clino
Javascript语言的特殊之处,就在于函数内部可以一不小心就声明全局变量
rming
2014-07-29 13:25:13 +08:00
@NemoAlex 怎么我也感觉是定义呢,虽然我不懂JS。。
xFan
2014-07-29 13:51:01 +08:00
@clino 这个应该是正解...
clino
2014-07-29 14:19:51 +08:00
@NemoAlex 其实 lua 也是这样,不写 local 就会定义成全局变量

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/125009

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX