js基础题

本文探讨了JavaScript中函数作为构造函数调用的三个步骤,包括新对象的创建、this的传递以及返回值的处理。此外,还讲解了函数提升和变量提升的概念,强调函数声明在变量声明之前被提升,并通过示例展示了函数内部的foo变量提升情况。
摘要由CSDN通过智能技术生成

1.

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

2.

function foo(){ 
  return foo; 
}
console.log(new foo() instanceof foo); // false

解析:当函数被当作构造函数调用时,遵从以下3个步骤:

i)、创建一个新的空对象。ii)、新创建的对象作为this参数传递给构造函数,从而成为构造函数的上下文。iii)、如果没有显式的返回值,新创建的对象则作为构造器的返回值进行返回。

3.// 函数提升(函数在函数内部提升),还有,函数声明相当于一个local变量,重新声明了一个local变量,名字都叫foo
var foo = 1;
function bar() {
  foo = 10;
  return;
  function foo() {}
}
bar();
alert(foo);


4. 

// 变量提升(变量在函数内提升),只提升变量声明,不提升变量初始化和使用。且,函数提升优先级高于变量提升。

function bar() {
  console.log('bar')
  var foo = 11;
  function foo() {}
  return foo;
  foo = 10;
}
alert(typeof bar());


var name = 'World!';
(function () {
    if (typeof name === 'undefined') {
        var name = 'Jack';
        console.log('Goodbye ' + name);
    } else {
        console.log('Hello ' + name);
    }
})();


5.var x   = 4,
    obj = {
        x: 3,
        bar: function() {
            var x = 2;
            setTimeout(function() {
                var x = 1;
                alert(this.x);
            }, 1000);
        }
    };
obj.bar();


6.// 当函数被当做构造函数运行时,返回时有3种情况。1:没有设定返回值,默认返回this
// 2.指定返回值为基本数据类型,则仍然返回this 3.指定返回值为对象,则按照指定值返回
x = 1;
function bar() {
  this.x = 2;
  return {name: 24};
}
var foo = new bar();
console.log(foo)
console.log(foo.x)


7.// 后面的bar忽略
var foo = function bar() {}; 
console.log(typeof foo);


8.var arr = [];
arr[0]  = 'a';
arr[1]  = 'b';
arr.foo = 'c';
console.log(arr.length);


9.function foo(a) {
  arguments[0] = 2;
  console.log(a);
}
foo(1);


10.function foo(){}
delete foo.length;
console.log(typeof foo.length);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值