js函数作用域等相关试题

1.立即执行函数表达式是什么?有什么作用?

作用:创建一个独立的作用域。

2.以下代码输出什么?

function getInfo(name, age, sex){

    console.log('name:',name);
    console.log('age:', age);
    console.log('sex:', sex);
    console.log(arguments);
    arguments[0] = 'valley';
    console.log('name', name);
}

getInfo('张三', 2, '男');
getInfo('小张', 3);
getInfo('男');
复制代码
getInfo('张三', 2, '男');输出:

name:张三

age:2

sex:男

name valley

getInfo('小张', 3);输出:

name:小张

age:3

sex:undefined

name valley

getInfo('男'); 输出:

name:undefined

age:undefined

sex:男

name valley

3.以下代码的输出为?
console.log(a);
var a = 1;
console.log(b);

答: console.log(a);undefined console.log(b);报错

4.如下代码的输出?为什么?

sayName('world');

sayAge(10);
function sayName(name){
    console.log('hello', name);
}
var sayAge = function(age){
    console.log(age);
};
复制代码

输出为hello world

5.如下代码的输出?为什么?

fn1是一个大的作用域,包含着fn2和fn3的。先看fn1,a是2,return3,看3,3里面a=4,看fn2,fn2里面a没有值就看它上一个作用域,则是1,fn1里面a=2,所以输出是2.

6.如下代码的输出?为什么?

同上题逻辑,不同的是fn2的上一个作用域是var a = 1,所以输出为1.

7.如下代码的输出?为什么?

求fn3,fn3下面有个fn2,fn2是要求a的值,可是a没有被赋值,就往上一作用域找,fn2上面是3,可是fn3里面a并没有被赋值,所以输出是undefined。

8.如下代码的输出?为什么?

var obj1 = {a:1, b:2};

var obj2 = {a:1, b:2};

console.log(obj1 == obj2);

console.log(obj1 = obj2);

console.log(obj1 == obj2);

第一个输出为false,因为obj1和obj2的地址不是同一个,虽然内容一样。

第二个输出{a:1, b:2};=是赋值的意思,吧obj2赋值给obj1,所以输出是{a:1, b:2};

第三个输出为true,因为上面obj2赋值给obj1了,所以他们现在是相等的,无论地址还是内容,所以是true。

9.以下代码输出为?

1

{name:"jirengu",age:3}

age3是因为上面的++obj.age,年龄加1,所以是3。

10.写一篇关于作用域链的博客,不少于200字,附上博客链接.
11.switch case 语句中的 break 有什么作用?

用于强制退出循环体,执行循环后面的语句。举例:

for(var i = 0; i< 6; i++){

if(i % 4 === 0){

    break;
}
console.log(i);
复制代码

}

i小于零,大于六,谁除以4余数是0,123皆不是,到四是的,break强制停止了,所以输出是123

12.以下代码输出为?

for(var i = 0; i< 6; i++){

if(i % 4 === 0){
    continue;
}
console.log(i);
复制代码

}

输出1235

13.以下代码中 result的值输出什么

var result = sum(3, 4)

console.log(result)

function sum(a, b){

return console.log(a + b)
复制代码

}

输出7

14.如下代码的输出?为什么?

var x = 10

bar()

function foo() {

console.log(x)

}

function bar(){

var x = 30

foo()

}

输出为10,因为console.log的是x的值,x=10,所以是10,只能往自己的函数作用域中找赋的值, 就算bar里面要赋值,但是x不能用。

15.break与continue有什么区别?

break:用于强制退出循环体,执行循环后面的语句。

continue:用于退出本次循环,执行下次循环。

16. 写一个函数squireArr,其参数是一个数组,作用是把数组中的每一项变为原值的平方。

var arr = [3, 4, 6]

function squireArr( arr ){

//补全 }

squireArr(arr)

console.log(arr) // [9, 16, 36]

17.如下代码的输出?

var x = 10

bar()

function foo() {

console.log(x)

}

function bar(){

var x = 30

foo() }

输出结果为10

18.如下代码的输出?

输出1

输出{name: 'jirengu', age:3};

转载于:https://juejin.im/post/5af3ac576fb9a07abb239d18

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值