zoukankan      html  css  js  c++  java
  • JS稀奇古怪题目

    JS稀奇古怪题目:

    1.操作对象属性优先级高于普通赋值操作

     1     var a = {
     2         n: 1
     3     };
     4     var b = a;
     5 
     6     //操作对象属性优先级高于普通赋值操作
     7     a.x = a = {
     8         n: 2
     9     };
    10 
    11     console.log(a.n, b.n); // 2 1
    12     console.log(a.x, b.x); //undefined Object

    2.作用域只有局部和全局,没有对象作用域。

    只能查找局部和全局作用域

    1 var obj = {
    2     fn2:function(){
    3         console.log(fn2);
    4     }
    5 }
    6 obj.fn2(); //error: fn2 is not defined

    修改绑定当前调用对象obj

    1 var obj = {
    2     fn2:function(){
    3         console.log(this.fn2);
    4     }
    5 }
    6 obj.fn2(); //function(){console.log(this.fn2);}

    3.变量提升

     1 var a = 2;
     2 function fn(){
     3     //局部变量提升
     4     console.log(a);
     5     var a = 3; 
     6     
     7 }
     8 fn(); //undefined
     9 
    10 
    11 function fn2(){
    12     console.log(a);
    13     a = 3;
    14     
    15 }
    16 fn2(); //2 [局部没有a,全局此时为2,之后为3]

    只看全局和function作用域不看if则if中的var name 变量提升了:

     1 var name = "hello";
     2 
     3 (function(){
     4     if(typeof name === 'undefined'){
     5         var name = 'world';
     6         console.log(name);
     7     }else{
     8         console.log(name);
     9     }
    10 })();  //word

    4.同名变量和函数

    首先变量提升,但函数声明总是覆盖同名变量

    • 如果同名变量没有赋值,则类型一定是function
    • 如果同名变量赋值了,
      • 如果打印语句在赋值之后,则类型一定是number
      • 如果打印语句在赋值之前,则类型一定是function

    (1)变量在函数前且有赋值

    1 var b;
    2 function b(){
    3 
    4 }
    5 console.log(typeof b); //function
    6 
    7 console.log(typeof b); //function

    (2)变量在函数前且无赋值

    1 var b = 3;
    2 function b(){
    3 
    4 }
    5 console.log(typeof b); //number
    6 
    7 console.log(typeof b); //number

    (3)变量在函数后且无赋值

    1 function b(){
    2 
    3 }
    4 var b;
    5 console.log(typeof b); //function
    6 
    7 console.log(typeof b); //function

    (4)变量在函数后且有赋值

    1 function b(){
    2 
    3 }
    4 var b = 3;
    5 console.log(typeof b); //number
    6 
    7 console.log(typeof b); //number

    5.线程

    主线程执行完毕之后,在从callback queue中取回调函数执行

    var a = 6;
    setTimeout(function(){
        console.log(0);
        alert(a);
        a = 666;
    },0);
    
    console.log(1);
    a = 66;

    执行主线程: 打印1,然后a = 66,在执行定时器回调函数打印0,弹框值66

    6.原型链

    注意:是在Function的原型上加方法,不是在F函数对象上加方法

     1 // var F = function(){}
     2 
     3 function F(){
     4 
     5 }
     6 
     7 Object.prototype.a = function(){
     8     console.log("a()");
     9 }
    10 
    11 Function.prototype.b = function(){
    12     console.log("b()");
    13 }
    14 
    15 var f = new F();
    16 
    17 F.a();//a()
    18 F.b();//b()
    19 f.a();//a()
    20 f.b();//报错
  • 相关阅读:
    java中的堆、栈、常量池
    java中int和Integer的区别
    python linecache模块读取文件的方法
    Python 字符串中 startswith()方法
    Python中的filter()函数的用法
    python sort、sorted高级排序技巧
    二级指针内存模型(一)
    Linux下多线程模拟停车场停车
    linux线程操作
    C语言实现多线程排序
  • 原文地址:https://www.cnblogs.com/zhihaospace/p/12006382.html
Copyright © 2011-2022 走看看