您如何向知道其所包含概念的人(例如函数,变量等)解释JavaScript闭包,但不了解闭包本身?
我已经看过维基百科上给出的Scheme示例,但遗憾的是它并没有帮助.
为什么被null认为是objectJavaScript?
正在检查
if ( object == null )
Do something
Run Code Online (Sandbox Code Playgroud)
同样的
if ( !object )
Do something
Run Code Online (Sandbox Code Playgroud)
?
并且:
null和之间有什么区别undefined?
你能把一个函数称为对象吗?例如:
function Tip(txt){
this.content = txt;
this.shown = false;
}
Run Code Online (Sandbox Code Playgroud)
和:
var tip = new Tip(elem.attr('title'));
Run Code Online (Sandbox Code Playgroud)
我的问题:
new一个函数吗? 来自http://www.jibbering.com/faq/faq_notes/closures.html:
注意:ECMAScript定义内部Object类型的内部[[prototype]]属性.使用脚本无法直接访问此属性,但它是使用在属性访问器解析中使用的内部[[prototype]]属性引用的对象链; 对象的原型链.存在公共原型属性以允许与内部[[prototype]]属性相关联的原型的分配,定义和操作.ECMA 262(第3版)中描述了两者之间关系的细节,超出了本讨论的范围.
两者之间的关系有哪些细节?我浏览了ECMA 262,所有我读过的内容都是:
构造函数的关联原型可以由程序表达式constructor.prototype引用,
本机ECMAScript对象具有名为[[Prototype]]的内部属性.此属性的值为null或对象,用于实现继承.
每个内置函数和每个内置构造函数都有Function原型对象,它是表达式Function.prototype的初始值.
每个内置原型对象都有Object原型对象,它是表达式Object.prototype(15.3.2.1)的初始值,作为其内部[[Prototype]]属性的值,除了Object原型对象本身.
从这一点我收集到的是[[Prototype]]属性相当于prototype几乎任何对象的属性.我错了吗?
以下程序的正确输出(ECMA标准的正确含义)是多少?
function nl(x) { document.write(x + "<br>"); }
nl(Function.prototype);
nl(Function.prototype.prototype);
nl(Function.prototype.prototype == Object.prototype);
nl(Function.prototype.prototype.prototype);
Run Code Online (Sandbox Code Playgroud)
Chrome和IE6同意说:
function Empty() {}
null for Chrome / undefined for IE6
false
Run Code Online (Sandbox Code Playgroud)
然后崩溃.
Mozilla输出:
function () { }
[object Object]
false
undefined
Run Code Online (Sandbox Code Playgroud)
这些都是正确的吗?Mozilla似乎做得更好,但最好的输出是
function () { }
[object Object]
true
undefined
Run Code Online (Sandbox Code Playgroud) 是否有一个不是函数的JavaScript对象?
javascript: x=y=z=Object; alert([window.navigator.userAgent,x,y,z].join("\n\n"))
Run Code Online (Sandbox Code Playgroud)
(有一种意见认为x,y,z仅仅是引用在这种情况下Object,也仅仅是一个参考function Object(){ ... },因为Object的值分配给x它们都是'相同’.作为'证据’
javascript:x=Object;x.p=43;alert([x==Object,x===Object,x.p,Object.p])
Run Code Online (Sandbox Code Playgroud)
显示器
true,true,43,43
Run Code Online (Sandbox Code Playgroud)
由于function Thing(){}不x=new Thing()使x对象或一个参考?怎么样new Thing()和Thing?或者y在y=x=new Thing()或y=x=Thing?怎么Thing=function(){}办?区别是没有实际意义的."Everything"(或者它是?)是通过引用调用的,但是可以通过评估字符串来强制逐个调用.所以...)
javascript:
void function(x,y,z){
alert( [window.navigator.userAgent,x,y,z].join("\n\n") )
}(Object,Object,Object)
Run Code Online (Sandbox Code Playgroud)
要么
javascript:
void function(x){ (function (y){ (function (z){
alert( [window.navigator.userAgent,x,y,z].join("\n\n") )
})(y) })(x) }(Object)
Run Code Online (Sandbox Code Playgroud)
(不是没有实际意义 - function必须使用(...)或强制的价值观void.(...) …
是否可以创建同时返回字符串和函数的变量/对象?
> a
'Hello World'
> a()
2018-07-13T13:45:10.967Z
Run Code Online (Sandbox Code Playgroud)
我看过一篇关于JavaScript对象的默认方法的文章,但现在找不到了。
我认为应该是这样的:
// Pseudo code
const a = {
toString: "Hello World",
function: () => new Date(),
};
Run Code Online (Sandbox Code Playgroud) 作为一种学习体验,我正在尝试创建自己的面向对象的小控制台调试脚本.我希望它类似于jQuery,因为你可以将它称为函数(jQuery('div'))或对象(jQuery.ajax()).
我有下面的代码几乎正常工作.它基本上是"console.log"的别名.
我的目标是能够执行以下操作:
var log = new RadDebug;
// Create our function
log('You selected: %s', fruit_type);
// Invoke the top-level function
// Output: You selected: "Apple"
log.warn('You selected: %s', fruit_type);
// Invoke a method "warn", which displays a caution icon next to the log.
// Output: (!) You selected "Apple"
Run Code Online (Sandbox Code Playgroud)
我正在处理的脚本:
function RadDebug() {
var debug_enabled = (debug_mode && window.console && window.console.log instanceof Function);
// If this object was already initialize, redirect …Run Code Online (Sandbox Code Playgroud)