当前位置:编程学习 > JAVA >>

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外面结果都是一样的 --------------------编程问答--------------------
引用 2 楼 longtian1213 的回复:
第一个呢
JS没有块级作用域
变量声明在整个作用域内都有效,你那代码其实相当于这样

        function test(){  
var name;
alert(name); //undefined            
name = "world";            
alert(name);  //world         


第二个是你在函数内没有用var声明,就是全局的name
第三个同第一个
第四个同第二个
这代码让你写的真蛋疼,
干嘛都用同一个函数名呢



引用 2 楼 longtian1213 的回复:
第一个呢
JS没有块级作用域
变量声明在整个作用域内都有效,你那代码其实相当于这样

        function test(){  
var name;
alert(name); //undefined            
name = "world";            
alert(name);  //world         


第二个是你在函数内没有用var声明,就是全局的name
第三个同第一个
第四个同第二个
这代码让你写的真蛋疼,
干嘛都用同一个函数名呢

++  有点明白了   谢谢   我其实之前是把别的同名的代码注释起来的  主要是对作用域链不是很了解,所以写点东西测试测试 --------------------编程问答--------------------

//看一下这样
var name="给值,或者接收";
alert(name);//这样才能弹窗的
--------------------编程问答--------------------
引用 4 楼 jueshengtianya 的回复:
Quote: 引用 2 楼 longtian1213 的回复:

第一个呢
JS没有块级作用域
变量声明在整个作用域内都有效,你那代码其实相当于这样

        function test(){  
var name;
alert(name); //undefined            
name = "world";            
alert(name);  //world         


第二个是你在函数内没有用var声明,就是全局的name
第三个同第一个
第四个同第二个
这代码让你写的真蛋疼,
干嘛都用同一个函数名呢



引用 2 楼 longtian1213 的回复:
第一个呢
JS没有块级作用域
变量声明在整个作用域内都有效,你那代码其实相当于这样

        function test(){  
var name;
alert(name); //undefined            
name = "world";            
alert(name);  //world         


第二个是你在函数内没有用var声明,就是全局的name
第三个同第一个
第四个同第二个
这代码让你写的真蛋疼,
干嘛都用同一个函数名呢

++  有点明白了   谢谢   我其实之前是把别的同名的代码注释起来的  主要是对作用域链不是很了解,所以写点东西测试测试

去看下javascript权威指南!javascript的作用域这玩意挺好玩的 --------------------编程问答--------------------
引用 6 楼 longtian1213 的回复:
Quote: 引用 4 楼 jueshengtianya 的回复:

Quote: 引用 2 楼 longtian1213 的回复:

第一个呢
JS没有块级作用域
变量声明在整个作用域内都有效,你那代码其实相当于这样

        function test(){  
var name;
alert(name); //undefined            
name = "world";            
alert(name);  //world         


第二个是你在函数内没有用var声明,就是全局的name
第三个同第一个
第四个同第二个
这代码让你写的真蛋疼,
干嘛都用同一个函数名呢



引用 2 楼 longtian1213 的回复:
第一个呢
JS没有块级作用域
变量声明在整个作用域内都有效,你那代码其实相当于这样

        function test(){  
var name;
alert(name); //undefined            
name = "world";            
alert(name);  //world         


第二个是你在函数内没有用var声明,就是全局的name
第三个同第一个
第四个同第二个
这代码让你写的真蛋疼,
干嘛都用同一个函数名呢

++  有点明白了   谢谢   我其实之前是把别的同名的代码注释起来的  主要是对作用域链不是很了解,所以写点东西测试测试

去看下javascript权威指南!javascript的作用域这玩意挺好玩的

++   好的 谢谢  刚买了一本javascript高级程序设计,现在正在学习中。。。 --------------------编程问答-------------------- 我弹出的全是 hello  +  world  循环,,
另外楼主搞清楚一点,如果js中出现同样命令的函数名,不管参数是否一样,都只会调用最后加载到的函数,前面的会被覆盖 因为js它不支持函数的重载。 --------------------编程问答--------------------
引用 8 楼 ch656409110 的回复:
我弹出的全是 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 --------------------编程问答--------------------
引用 10 楼 owen1759 的回复:
我是这样理解的,各位高人看看有没有错:
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分析得很深刻嘛~~ --------------------编程问答--------------------
引用 12 楼 owen1759 的回复:
呵呵,不错嘛,lz分析得很深刻嘛~~


目前正在学习javascript感觉这个语言好灵活啊!!! --------------------编程问答-------------------- js的function是从内到外一级一级的查询的。查询到后不在查询,就停止了。一般定义都睡function()内定义叫做局部变量 --------------------编程问答--------------------
引用 14 楼 Fchine 的回复:
js的function是从内到外一级一级的查询的。查询到后不在查询,就停止了。一般定义都睡function()内定义叫做局部变量

你可以看看    
http://stevejox.iteye.com/blog/1926928 
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,