读代码,写结果

写出下列代码的输出结果:

 var arr1 = [10, 20];
    arr1.push(30);
    arr1.push([40, 50]);
    var data = arr1.pop();
    console.log(data); 

上述代码的输出结果为 [40, 50]。
数组的方法 push() 表示入栈,即在栈顶(数组尾端)添加指定的元素;方法 pop() 表示出栈,删除并返回栈顶(数组尾端)的元素。
代码中,第一次入栈为数字 30;第二次入栈为数组 [40,50],且该数组排在栈顶。因此,调用方法 pop() 时,将删除并返回栈顶元素 [40,50],这是一个数组,因此输出结果为[40, 50]。


写出下列代码的输出结果:

   var arr1 = [10, 20, 30, 40];
    arr1.push(50);
    arr1.shift();
    console.log(arr1); 

上述代码的输出结果为[20, 30, 40, 50]。
数组的方法 push() 表示入栈,即在栈顶(数组尾端)添加指定的元素,因此,数字50 将作为数组的最后一个元素;方法 shift() 表示删除并返回栈底(数组头部)的元素,因此,将从数组删除数值 10。此时,输出数组,将输出剩余的 4 个数值,即[20, 30, 40, 50]。


写出下列代码的输出结果:

 var regexp = /\bdo\b/ig;
    var data = 'He does told to Do,do.';
    console.log(data.search(regexp));

上述代码的输出结果为16。
String 的 search(regexp) 方法,用于返回第一次出现匹配指定正则表达式的下标,若没有匹配则返回-1。
试题中,正则表达式 \bdo\b 表示匹配完整的单词 do,且不区分大小写。而变量 data 中,第一次出现单词 do(不区分大小写)的位置为 16。


function add(num) {
        try {
            num = Number(num);
            if (isNaN(num)) {
                throw new Error('Arguments is NaN');
            }
            console.log('try block end');
        } catch (e) {
            console.log('catch block');
            return;
        } finally {
            console.log('finally block');
        }
        console.log('function end');
    }

    add('10x');

上述代码运行,会先输出 catch block;再输出 finally block。
这是因为,执行代码 num = Number(num); 时,因为传入的参数值为字符串“10x”,无法转换为 number 类型,则产生错误,运行到 catch 语句块中,输出“catch bloc”;而 finally 块始终会运行,因此继续输出“finally block”。程序发生异常后,将退出,因此不再执行其他语句。


var a = 100;
    function f() {
        var a = 200;
        function g() {
            return a;
        }
        return g;
    }
    console.log(f()());

上述代码运行,会输出200。
上述代码意味着,先执行 f(),得到该函数内嵌套的一个函数对象 g,然后调用这个嵌套的函数。
定义函数 f 时,它保存一个作用域链,作用域链上有两个对象,一个是函数对象,一个是全局对象,此时,全局变量 a 是全局对象的属性,和函数对象 f 无关。
执行函数 f 时,会创建一个活动对象,其中保存变量 a 作为函数 f 的属性而存在。而函数g嵌套定义在函数 f里,对其访问变量 a时,它没有变量 a,则继续往下查找函数 f。找到函数 f 的属性 a 并返回。因此,输出结果为 200。
这种函数将变量包裹起来,外部代码可以通过内嵌函数 g来访问函数 f 内的局部变量的方式,也称为闭包。


var n = 10;
function counter() {
        var n = 0;
        var g = function () {
                            return ++n;
                    };
        return g;
    }

    var c1 = counter();
    console.log(c1());
    console.log(c1());
    console.log(c1());

上述代码运行后,分别输出数字 1、2、3。
首先从应用上分析,这是一个闭包的典型应用:模拟计数器。调用一次函数counter,则得到一个计数器,即代码中的变量 c1,用于统计被调用的次数;每运行一次计数器c1,则访问次数加1。因此分别输出数字1、2、3。
其次从代码原理来分析:函数 counter 返回其内嵌函数g,该函数中包裹了函数 counter 的局部变量 n,其初始值为 0;每次运行函数g,均访问相应的局部变量 n,从而实现累加计数的效果。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泠泠在路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值