JS题目整理

1.

var foo='123';

function  print(){

var foo = '456';

this.foo = '789';

console.log(foo);

}

print();//456

2.

 var foo='123';
    function print() {
        this.foo='789';
        console.log(foo);
    }
    print(); //789
    new print();   //123(new之后this不再指向Window)

3.

var a=5;
    function test() {
        a=0;
        console.log(a);
        console.log(this.a);
        var a;
        console.log(a);
    }
    test(); //0  5  0
    new test();// 0 undefined  0

4.

function print() {
        console.log(foo);//undefined
        var foo=2;
        console.log(foo);//2
        console.log(hello);//报错

    }
    print();

5.

 function print() {
        var test;
        test();
        function test() {
            console.log(1)
        }
    }
    print(); //1
6.
 function print() {
        var marty={
            name:"marty",
            printName:function () {
                console.log(this.name);
            }
        }
        var test1={name:"test1"};
        var test2={name:"test2"};
        var test3={name:"test3"};
        test3.printName=marty.printName;
        var printName2=marty.printName.bind({name:123});
        marty.printName.call(test1);//test1调用marty.printName  //test1
        marty.printName.apply(test2);//test2
        marty.printName();//marty
        printName2();//123
        test3.printName();//test3
    }
    print();
7.
 var bar={a:"002"};
    function print() {
        bar.a='a';
        Object.prototype.b='b';
        return function inner() {
            console.log(bar.a);//a
            console.log(bar.b);//b
        }
    }
    print()();

8.给有序数组乱序

var arr=[1,2,3,4,5,6];
    arr.sort(function () {
        return (Math.random()-0.5);
    })
    console.log(arr);

9.按对象的年龄属性排序

 var zhang={
        name:'zhang',
        age:18
    }
    var zhang2={
        name:'zhang2',
        age:20
    }
    var zhang3={
        name:'zhang3',
        age:17
    }
    var arr=[zhang,zhang2,zhang3];
    arr.sort(function (a,b) {
        return a.age-b.age;
    })

10.按字节长度排序

function retBytes(str) {//求字节长度
        var num=str.length;
        for(var i=0;i<str.length;i++){
            if(str.charCodeAt(i)>255){
                num++;
            }
        }
        return num;
    }

    var arr=['aadssadfsaf','sss','bbbb','da','dasdasdf'];
    arr.sort(function (a,b) {
        return retBytes(a)-retBytes(b);
    })

11.返回元素e的第n层父节点

var i=document.getElementsByTagName('i')[0];
    function retParent(e,n) {
        while(e&&n){
            e=e.parentElement;
            n--;
        }
        return e;
    }
12.
var str="abc";
        str+=1;
        var test=typeof (str);//test=="string"
        if(test.length==6){
            test.sign="typeof的返回结果可能为String";
            //new String(test).sign="typeof的返回结果可能为String"   delete
        }
        //new String(test).sign
        console.log(test.sign);//输出undefined
13.
function Person(name,age,sex) {
            var a=0;
            this.name=name;
            this.age=age;
            this.sex=sex;
            function sss() {
                a++;
                console.log(a);
            }
            this.say=sss;
        }
        var p1=new Person();
        p1.say();//1
        p1.say();//2
        var p2=new Person();
        p2.say();//1
14.
 var x=1,y=z=0;
        function add(n) {
            return n=n+1;
        }
        y=add(x);
        function add(n) {//预编译过程 第二个add覆盖了第一个add
            return n=n+3;
        }
        z=add(x);
        console.log(x);//1
        console.log(y);//4
        console.log(z);//4

15.

 var x=1;
        if(function f() {})
        {
            x+=typeof f;
        }
            console.log(x);//1undefined

16.

var name="222";
        var a={
            name:"111",
            say:function () {
                console.log(this.name);//单独执行  this-->window
            }
        }
        var fun=a.say;
        fun()//222
        a.say()//111
        var b={
            name:"333",
            say:function (fun) {
                //this-->b
                fun();
            }
        }
        b.say(a.say);//222
        b.say=a.say;
        b.say();//333

17.立即执行函数 求阶乘

  var num=(function (n) {
            if(n==1){
                return 1;
            }
            else
                return n*arguments.callee(n-1)//arguments.callee=函数引用
        }(5))
        console.log(num);

猜你喜欢

转载自blog.csdn.net/G_072625/article/details/81016823