javascript闭包协议__

javascript闭包协议__,javascript,closures,prototype,Javascript,Closures,Prototype,这是有道理的。然而,add5(2)是对象吗?为什么会有一个0?我不知道您在哪个环境中运行代码,但是当您试图访问\uuuuuuuuuu一个数字值时会发生这种情况:该值会临时转换为一个数字对象(即相当于调用新数字(7))。该对象的原型当然是编号。原型 : 数字原型本身就是一个数字对象;它有一个值为+0的[[NumberData]]内部插槽 我只能假设您使用的环境检测到add5(2)。\uu proto\uu是一个数字对象,并调用其valueOf方法,然后返回0: console.log(Numbe

这是有道理的。然而,add5(2)是对象吗?为什么会有一个0?

我不知道您在哪个环境中运行代码,但是当您试图访问
\uuuuuuuuuu
一个数字值时会发生这种情况:该值会临时转换为一个数字对象(即相当于调用
新数字(7)
)。该对象的原型当然是编号。原型

:

数字原型本身就是一个数字对象;它有一个值为+0的[[NumberData]]内部插槽

我只能假设您使用的环境检测到
add5(2)。\uu proto\uu
是一个数字对象,并调用其
valueOf
方法,然后返回
0


console.log(Number.prototype.valueOf())我不知道您正在哪个环境中运行代码,但当您尝试访问
\uuuu proto\uuuu
上的数字值时会发生这种情况:该值会临时转换为数字对象(即,相当于调用
新数字(7)
)。该对象的原型当然是编号。原型

:

数字原型本身就是一个数字对象;它有一个值为+0的[[NumberData]]内部插槽

我只能假设您使用的环境检测到
add5(2)。\uu proto\uu
是一个数字对象,并调用其
valueOf
方法,然后返回
0


console.log(Number.prototype.valueOf())你说那里是什么意思?根据我的chrome开发工具,
\uuuu proto\uuu
是一个对象,而不是0。JS中的所有内容(除了
未定义的
null
)都是一个对象。@jmargolisvt:No。所有基本值(包括字符串、数字、布尔值和符号)都不是对象。您应该获得与
(7)相同的输出。这与函数调用或闭包的使用无关。@VladimirKovpak:这不会使
null
成为对象。这就是
typeof
的工作原理(不幸的是)。你指的是什么?根据我的chrome开发工具,
\uuuu proto\uuu
是一个对象,而不是0。JS中的所有内容(除了
未定义的
null
)都是一个对象。@jmargolisvt:No。所有基本值(包括字符串、数字、布尔值和符号)都不是对象。您应该获得与
(7)相同的输出。这与函数调用或闭包的使用无关。@VladimirKovpak:这不会使
null
成为对象。这就是
typeof
的工作原理(很不幸)。谢谢。函数中的参数在编译时是否可以在javascript中看到?我的意思是在这个范围内,参数被创建为一个变量。谢谢。函数中的参数在编译时是否可以在javascript中看到?我的意思是在范围内,参数被创建为变量。
function makeAdder(x) {
  return function(y) {
    return x + y;
  };
}
var add5 = makeAdder(5);
add5(2); //7;
add5(2).__proto__;  //0`