前端面试题目总结1

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Hreticent/article/details/86772692

1. 非严格模式下写出下面表达式结果

parseInt(“123a”)//123

parseInt()方法首先查看位置0处的 字符,判断它是否是个有效数字;如果不是,该方法将返回NaN,不再继续执行其他操作。但如果该字符是有效数字,该方法将查看位置1处的字符,进行同样的 测试。这一过程将持续到发现非有效数字的字符为止,此时parseInt()将把该字符之前的字符串转换成数字。

2. 运行以下程序,y和z的最终结果为:

<script> 
    var m= 1, j = k = 0; 
    function add(n) { 
        return n = n+1; 
  } 
    y = add(m); 
    function add(n) { 
        return n = n + 3; 
    } 
z = add(m); 
</script> 

js里面没有函数重载的概念,在其他语言中(如java)java中,可以存在同名函数,

只要传入的参数数量或者类型不同即可。在js中,定义了两个同名函数后,

后面的函数会覆盖前面定义的函数。结合这道题来说,由于函数声明提升,

所以函数声明会提前,由于存在同名函数,后面的add函数将覆盖第一个add函数,

所以两次调用add()返回的值是相同的。也就是y,z都为4.

function add(){}定义的函数会优先解析,而不是顺序解析;因此整个过程中,首先依次解析两个add function,由于同名,所以后者会覆盖前者;然后,顺序解析其余的JS代码,y = add(m);语句和z = add(m); 语句调用的都是第二个add function,因此返回的都是4.

定义函数的三种方式有:function函数、Function()构造函数、对象字面量。从解析顺序来分析,它们的不同在于:function函数:优先解析;Function()构造函数、函数字面量定义:顺序解析。

示例:
    // 4 2 3 3 5 6
function f(){return 1;}                 // 函数1     优先解析
 alert(f());        //返回值为4 说明第1个函数被第4个函数覆盖    
var f = new Function("return 2;");        // 函数2 
alert(f());        //返回值为2 说明第4个函数被第2个函数覆盖
var f = function(){return 3;}            // 函数3 
alert(f());           //返回值为3 说明第2个函数被第3个函数覆盖    
function f(){return 4;}                // 函数4    优先解析 覆盖函数1
alert(f());        //返回值为3 说明第4个函数被第3个函数覆盖
var f = new Function("return 5");         // 函数5 
alert(f());    //返回值为5 说明第3个函数被第5个函数覆盖    
var f = function(){return 6 ;}            // 函数6 
alert(f());        //返回值为6 说明第5个函数被第6个函数覆盖                     

3. 

var a= 4399<0 || typeof(4399+'');
console.log(a)//string

短路或  如果第一项是true 则结果为true 如果第一项为false 结果 为第二项(第二项不做计算直接返回)

1.4399<0值为false

2.js中字符串的前面或者后面有加号,此时加号为拼接,4399+“” => 4399,原式中的4399被隐式转换成字符串,字符串4399与空字符串拼接的字符串4399 。

var bb = 1;
function aa(bb) {
    bb = 2;
    alert(bb);
};
aa(bb);//2
alert(bb);//1

在aa函数中,bb是以传值的方式传入的,在函数中,会重新定义一个bb变量,并将其值覆为2,并不影响函数体外的bb变量,所以其值仍然为1.

5

//以下代码的输出结果是
var f = function g() {
        return 23;
    };
typeof g();

 

 在 JS 里,声明函数只有 2 种方法:
第 1 种: function foo(){...} (函数声明)
第 2 种: var foo = function(){...} (等号后面必须是匿名函数,这句实质是函数表达式)

除此之外,类似于 var foo = function bar(){...} 这样的东西统一按 2 方法处理,即在函数外部无法通过 bar 访问到函数,因为这已经变成了一个表达式。

但为什么不是 "undefined"?
这里如果求 typeof g ,会返回 undefined,但求的是 g(),所以会去先去调用函数 g,这里就会直接抛出异常,所以是 Error。

猜你喜欢

转载自blog.csdn.net/Hreticent/article/details/86772692