首页 > 试题广场 >

在严格模式下执行以下选项的程序,不会抛出异常的是()

[单选题]

在严格模式下执行以下选项的程序,不会抛出异常的是()

  • uname = 'window';

    setTimeout(function(){

    console.log(this.uname)

    },1000);

  • var uname = 'window';

    (function(){console.log(this.uname)}());

  • function fn(a,a){

    console.log(a+a);

    }

    fn(1,1);

  • var uname = 'window'

    function Person(){console.log(this.uname);}

    var p = new Person();

A.严格模式下不允许未声明赋值uname = 'window';,而且严格模式下的this在函数体内不会默认指向window,而是指向undefined, 当然报错❌

B.和A同理,指向undefined。undefined.uname 当然报错❌

C.严格模式下函数参数不能同名 报错❌

D.在严格模式下,构造函数中的this指向构造函数创建的对象实例,this指向person{},但是person对象没有uname这个属性,因此为undefined

编辑于 2022-03-14 20:25:35 回复(2)
选项A:
1)uname = 'window' 抛出错误:在严格模式下,给未声明的变量赋值,会导致抛出ReferenceError,报错
                                                     简而言之,严格模式下变量必须用关键字声明后才能使用

2)严格模式下,普通函数的this指向undefined


3)严格模式下,立即执行函数的this指向undefined

4)严格模式下,setTimeout中函数的this指向的window(与普通函数不同)




选项B:
严格模式下,立即执行函数的this指向的是undefinded,所以undefinded.uname当然会报错



选项C:
严格模式下,函数的参数不能同名,否则报错
非严格模式下,函数的参数如果同名,会取第二个实参的值。



选项D:
严格模式下:构造函数的this指向undefined,但是构造函数实例化对象的this指向的是实例化对象本身

构造函数实例化对象的this指向的是实例化对象本身,而实例化对象下没有uname这个属性,所以得到undefined,没有报错
编辑于 2022-01-17 17:06:05 回复(5)
在练习的时候选项D是一行,没加分号,语法就有问题
发表于 2023-04-17 10:54:55 回复(0)
严格模式下,函数中this指向undefined。。构造函数中this指向实例对象
发表于 2022-02-23 19:46:41 回复(0)
D选项虽然不会抛出异常,但是打印出undefined。我误会了🤣🤣
发表于 2022-03-10 10:37:50 回复(0)
这出的什么题目,D选项连分号都没有,你说不会报错?
发表于 2024-01-10 16:39:20 回复(0)
严格模式下,未声明就赋值会报错;匿名函数的this取决于上下文,是undefined,取undefined的uname会报错;严格模式下不允许同名参数;this指向新创建的实例p,p的uname是undefined
发表于 2023-04-10 14:00:46 回复(0)
严格模式为申明变量就赋值会报错,不允许重名参数,
编辑于 2022-04-07 02:08:09 回复(0)
A、uname = 'window' 抛出错误:在严格模式下,给未声明的变量赋值,会导致抛出ReferenceError;但是setTimeout中函数内的this指向window,并不是像函数一样this是undefined,所以这里的setTimeout不会抛出错误


编辑于 2021-12-21 20:52:16 回复(0)