- 主题:问个js变量作用域的问题
代码如下:
var scope = "global";
function f( ) {
alert(scope); // Displays "undefined", not "global"
var scope = "local"; // Variable initialized here, but defined everywhere
alert(scope); // Displays "local"
}
f( );
不是很明白为什么第一个alert没有打印全局变量。
※ 来源:·水木社区 newsmth.net·[FROM: 117.79.73.*]
FROM 117.79.73.*
因为你后面用var定义了scope,所以在它定义之前是undefined
如果你里面没有定义同名的变量才可以
或者里面不用var,相当于直接改全局变量也可以
【 在 komac (密钥) 的大作中提到: 】
: 代码如下:
: var scope = "global";
: function f( ) {
: ...................
--
FROM 166.111.39.29
哦,明白了。
不过为什么要这样设计呢?这样只能带来负面效应啊。
我疑惑的是如果是解释执行,在执行alert的时候,应该还不知道后面有var声明同名变
量吧。除非是预先扫描了一遍。
【 在 chumsdock (微笑服务) 的大作中提到: 】
: 因为你后面用var定义了scope,所以在它定义之前是undefined
: 如果你里面没有定义同名的变量才可以
: 或者里面不用var,相当于直接改全局变量也可以
: ...................
--
FROM 117.79.73.*
正负面都是一半一半吧,这样也不是没有好处,避免混乱
非要访问,也可以用window.scope访问全局变量
至于解释的原理,有什么样的标准才有什么样的解释呗。
【 在 komac (密钥) 的大作中提到: 】
: 哦,明白了。
: 不过为什么要这样设计呢?这样只能带来负面效应啊。
: 我疑惑的是如果是解释执行,在执行alert的时候,应该还不知道后面有var声明同名变
: ...................
--
FROM 166.111.39.29
这个跟js execution context、scope chain等有关。
f函数内定义了scope,则在执行时,先从自身f中寻找scope,并且找到了,
就不会从其父级chain中再寻找。
但在运行到alert时,此时scope还未定义,所以就undefined了。
【 在 komac (密钥) 的大作中提到: 】
: 代码如下:
: var scope = "global";
: function f( ) {
: ...................
--
FROM 221.221.235.*
最好的办法就是不要用同名变量。比如local变量用 _scope 的形式。在这种问题是钻牛角筋没啥意思
【 在 komac (密钥) 的大作中提到: 】
: 代码如下:
: var scope = "global";
: function f( ) {
: ...................
--
FROM 123.121.1.*
不这么觉得,这个是js的基础,还是理解透了比较好.
【 在 helloweenpad (helloweenpad) 的大作中提到: 】
: 最好的办法就是不要用同名变量。比如local变量用 _scope 的形式。在这种问题是钻牛角筋没啥意思
--
FROM 210.192.102.*
你说对了,就是预先扫描一遍的
【 在 komac (密钥) 的大作中提到: 】
: 哦,明白了。
: 不过为什么要这样设计呢?这样只能带来负面效应啊。
: 我疑惑的是如果是解释执行,在执行alert的时候,应该还不知道后面有var声明同名变
: ...................
--
FROM 123.127.65.*
虽然是解释执行,也不是一行一行解释啊,也有scope的概念啊,总得压栈弹栈吧
不过这个写法在ECMA Script 5里面是非法的,知道就行了,千万别这么玩
【 在 komac (密钥) 的大作中提到: 】
: 哦,明白了。
: 不过为什么要这样设计呢?这样只能带来负面效应啊。
: 我疑惑的是如果是解释执行,在执行alert的时候,应该还不知道后面有var声明同名变
: 量吧。除非是预先扫描了一遍。
--
FROM 202.106.68.*