我在某个地方找到了这种类型的代码。 x和y代表什么?这些变量的范围是否仅限于函数f?
function f () {
};
f.x = 1;
f.y = 2;
答案 0 :(得分:1)
javascript中的函数是第一类对象,可以视为任何其他对象。
var a = {};
a.x = 1;
b.x = 2; // looks normal, right?
javascript中的对象是动态的,并且可以动态地将属性添加到它们中,因此,由于函数也只是对象,因此可以向它们添加属性。这些属性的范围与处理任何其他对象时的范围相同。这些属性不会影响函数内部范围(this
上没有)
答案 1 :(得分:1)
这些变量的范围是否仅限于函数f?
这些是f
函数对象的属性,它们的范围由f
定义的范围和定义,其中f的引用可以是使用即可。
<强>演示强>
function f1() {
function f() {
};
f.x = 1;
f.y = 2;
return f;
}
var y = f1();
console.log(y.x)// prints 1 since scope of x property depends upon scope of y
但由于它们未在f
的原型中定义,它们不能被继承。
<强>演示强>
function f() {};
f.x = 1;
f.y = 2;
var y = new f();
console.log(y.x) // prints undefined
答案 2 :(得分:1)
在你的情况下(我改变了语法,但它是一样的)
var fn = () => { };
fn.x = 1;
fn.y = 2;
您要向fn
对象追加2个属性。虽然它是function
,如果你typeof fn
,它会打印'function'
它是一个扩展的Object
,意味着它有属性。
您可以使用Object.getOwnPropertyNames()
方法进行检查。
只需在fn.x = 1; fn.y = 2;
var fn = () => {};
console.log(Object.getOwnPropertyNames(fn)); // prints ["length", "name", "arguments", "caller", "prototype"]
fn.x = 1;
fn.y = 2;
console.log(Object.getOwnPropertyNames(fn)); // prints ["length", "name", "arguments", "caller", "prototype", "x", "y"]
答案 3 :(得分:0)
每个JavaScript函数实际上都是一个Function对象。
函数对象是从Function.prototype
继承的对象。因此,函数基本上是可以调用的对象,因此您可以像任何其他对象一样附加到它们。
MDN参考:javadocs