校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > js语言和框架 > 闭包相关
题目

var a = 0;
var b = 0;
function A(a) {
    A = function(b) {
        console.log('a+b=' + (a + b++));
    }
    console.log('a=' + a++);
}
A(1);
A(2);

解答

JavaScript特性:
闭包机制:闭包创建后,可以保存创建时的活动对象。
自加操作符:++,当++作为后缀操作符时,调用++的表达式的值为自加前的自加对象的值。

此处说明 ++操作符的特性。
var i = 0;
var eg = i++
console.log(i, eg) // 1 0


var a = 0;

var b = 0;
function A(a) {
    A = function(b) {
        console.log('a+b=' + (a + b++));
    }
    console.log('a=' + a++);
}

 第一次调用A时,执行到console.log('a=' + a++)时,a已经完成自加,此时a的值为2,a++的值为1。

A(1);

 第二次调用A时,A已经被重新赋值,指向了一个新的函数引用;

 由于标识符A是在全局作用域定义的,所以在函数内部被重新赋值,在全局作用域也可以访问到重新赋值后的函数。

 此时,也创建了一个闭包,该闭包保存了创建环境的活动对象。

 此时活动对象:{ a: 2 },同时,根据传入的数值2,确定 b = 2,b++值为3。

 执行到 console.log('a+b=' + (a + b++)),故而输出4

A(2);

C 2条回复 评论
知乎

接口测试工具的话可以试试国产的接口测试工具apipost,使用起来很方便简介,不需要安装环境,全中文使用起来方便。下载地址:https://www.apipost.cn

发表于 2023-06-01 23:00:00
0 0
Bury

UI设计发展前景怎么样

发表于 2021-12-07 10:20:00
0 0