zoukankan      html  css  js  c++  java
  • 继续几道经典的js题(局部和全局变量,对象等)

    1、

    //现有代码如下:
    var foo = 1;
    function main(){
    alert(foo);
    var foo = 2;
    alert(this.foo)
    this.foo = 3;
    }
    //1.请给出以下两种方式调用函数时,alert的结果,并说明原因。
    var m1 = main();
    var m2 = new main();
    //2.如果想要var m1 = main()产生的m1和前面的m2完全一致,又该如何改造main函数?

    1、var m1=main()时,alert的结果是undefined和1,原因是首先在alert(foo)的时候,foo在main()函数域内还没有被定义(这里作者说错了,不是没有定义,是局部变量还没有赋值,变量声明时会提前的),因此提示undefined,而在输出this.foo时,因为此时的函数执行环境是全局域,相当于window.main(),因此this=window,所以this.foo=window.foo=1
    var m2=new main()时,alert的结果是undefined和undefined,第一个undefined的原因与前面一种情况相同,而第二个提示undefined的原因是在这种情况下用new构造了一个main()的实例,因此执行环境发生了改变,不再是全局域,而是m2,因此此时的this=m2,因此this.foo=m2.foo,但是由于在alert(this.foo)时,m2中的this.foo还未被定义,因此提示undefined

    注意:全局环境下定义的变量会被当做全局对象的属性:如在1中alert(this.main)也会有结果。但是在局部环境下就不是了,局部变量不会被当做对象的属性。如:foo就不是main的属性。

    2/  写一段脚本,实现:当页面上任意一个链接被点击的时候,alert出这个链接在页面上的顺序号,如第一个链接则alert(1), 依次类推;

    window.onload = function() {
        var l = document.links.length;
        for (var i = 0; i < l; i++) {
            document.links[i].onclick = function(x) {
                return function() {
                    alert(x + 1);
                };
            }(i);
        }
    };
    

      看着很简单,其实考察了闭包。

    3、请用html5标准完成以下页面布局(要求完整书写整个页面的html代码,不需要写CSS)

    T1C.1gFhhcXXb0Z3E6-451-391

    <!DOCTYPE html>
    <html>
    <head>
    <title>html5</title>
    </head>
    <body>
    </body>
    <header></header>
    <nav></nav>
    <div>
        <aside></aside>
        <section></section>
    </div>
    <footer></footer>
    </body>
    </html>
    

      

  • 相关阅读:
    JDK5的新特性
    反射(一)类加载器、反射、动态代理
    泛型(五)
    spring自定义注解实现登陆拦截器
    java国际化
    Codeforces 231A
    Codeforces 231A
    CCF CSP 201909-2 小明种苹果(续)
    CCF CSP 201909-2 小明种苹果(续)
    CCF CSP 201909-1 小明种苹果
  • 原文地址:https://www.cnblogs.com/dunken/p/4362162.html
Copyright © 2011-2022 走看看