javascript吐血帖
--------------------编程问答-------------------- 这不科学吧,怎么可能有这种情况 --------------------编程问答-------------------- 第一个呢JS没有块级作用域
变量声明在整个作用域内都有效,你那代码其实相当于这样
function test(){
var name;
alert(name); //undefined
name = "world";
alert(name); //world
}
第二个是你在函数内没有用var声明,就是全局的name
第三个同第一个
第四个同第二个
这代码让你写的真蛋疼,
干嘛都用同一个函数名呢 --------------------编程问答--------------------
<script type="text/javascript">
var name = "hello";
function test(){
alert(name); //hello
var name = "world";
alert(name); //world
}
</script>
我这是这样的,放在head、body和 body外面结果都是一样的 --------------------编程问答--------------------
++ 有点明白了 谢谢 我其实之前是把别的同名的代码注释起来的 主要是对作用域链不是很了解,所以写点东西测试测试 --------------------编程问答--------------------
--------------------编程问答--------------------
//看一下这样
var name="给值,或者接收";
alert(name);//这样才能弹窗的
去看下javascript权威指南!javascript的作用域这玩意挺好玩的 --------------------编程问答--------------------
第一个呢
JS没有块级作用域
变量声明在整个作用域内都有效,你那代码其实相当于这样
function test(){
var name;
alert(name); //undefined
name = "world";
alert(name); //world
}
第二个是你在函数内没有用var声明,就是全局的name
第三个同第一个
第四个同第二个
这代码让你写的真蛋疼,
干嘛都用同一个函数名呢
第一个呢
JS没有块级作用域
变量声明在整个作用域内都有效,你那代码其实相当于这样
function test(){
var name;
alert(name); //undefined
name = "world";
alert(name); //world
}
第二个是你在函数内没有用var声明,就是全局的name
第三个同第一个
第四个同第二个
这代码让你写的真蛋疼,
干嘛都用同一个函数名呢
++ 有点明白了 谢谢 我其实之前是把别的同名的代码注释起来的 主要是对作用域链不是很了解,所以写点东西测试测试
去看下javascript权威指南!javascript的作用域这玩意挺好玩的
++ 好的 谢谢 刚买了一本javascript高级程序设计,现在正在学习中。。。 --------------------编程问答-------------------- 我弹出的全是 hello + world 循环,,
另外楼主搞清楚一点,如果js中出现同样命令的函数名,不管参数是否一样,都只会调用最后加载到的函数,前面的会被覆盖 因为js它不支持函数的重载。 --------------------编程问答--------------------
我弹出的全是 hello + world 循环,,
另外楼主搞清楚一点,如果js中出现同样命令的函数名,不管参数是否一样,都只会调用最后加载到的函数,前面的会被覆盖 因为js它不支持函数的重载。
嗯这个我知道 js中不存在重载,不好意思,我其实之前是把别的同名的代码注释起来的 主要是对作用域链不是很了解,所以写点东西测试测试,只是对作用域链不太了解,不好意思让大家误解了。。。 --------------------编程问答-------------------- 我是这样理解的,各位高人看看有没有错:
1.浏览器js里面所有最外层的变量都是window对象的属性
2.在“块”内,所有没写var的变量都会依次往上级找,找到为止。
3.“定义”和“初始化”是分开进行的,所有“定义”都会被提前到块最前面,未初始化前为undefined
于是,通过浏览器的解释,你的代码就变成这样了。
var window.name = "hello";
function test(){
var name = undefined;
alert(name); //undefined
name = "world";
alert(name); //world
}
test();
var window.name = "hello";
function test(){
alert(window.name); //hello
window.name = "world";
alert(window.name); //world
}
test();
window.name = "hello";
function test(){
var name = undefined;
alert(name); //undefined
name = "world";
alert(name); //world
}
test();
window.name = "hello";
function test(){
alert(window.name); //hello
window.name = "world";
alert(window.name); //world
}
test();
最后加一句,最外层你加不加var是等价的,因为它都成为了window的属性。
所以你的例子1=3、2=4 --------------------编程问答--------------------
我是这样理解的,各位高人看看有没有错:
1.浏览器js里面所有最外层的变量都是window对象的属性
2.在“块”内,所有没写var的变量都会依次往上级找,找到为止。
3.“定义”和“初始化”是分开进行的,所有“定义”都会被提前到块最前面,未初始化前为undefined
于是,通过浏览器的解释,你的代码就变成这样了。
var window.name = "hello";
function test(){
var name = undefined;
alert(name); //undefined
name = "world";
alert(name); //world
}
test();
var window.name = "hello";
function test(){
alert(window.name); //hello
window.name = "world";
alert(window.name); //world
}
test();
window.name = "hello";
function test(){
var name = undefined;
alert(name); //undefined
name = "world";
alert(name); //world
}
test();
window.name = "hello";
function test(){
alert(window.name); //hello
window.name = "world";
alert(window.name); //world
}
test();
最后加一句,最外层你加不加var是等价的,因为它都成为了window的属性。
所以你的例子1=3、2=4
++ 我写了一点东西 你可以看看
http://stevejox.iteye.com/blog/1926928 --------------------编程问答-------------------- 呵呵,不错嘛,lz分析得很深刻嘛~~ --------------------编程问答--------------------
呵呵,不错嘛,lz分析得很深刻嘛~~
目前正在学习javascript感觉这个语言好灵活啊!!! --------------------编程问答-------------------- js的function是从内到外一级一级的查询的。查询到后不在查询,就停止了。一般定义都睡function()内定义叫做局部变量 --------------------编程问答--------------------
js的function是从内到外一级一级的查询的。查询到后不在查询,就停止了。一般定义都睡function()内定义叫做局部变量
你可以看看
http://stevejox.iteye.com/blog/1926928
补充:Java , Web 开发