我是一名新程序员,我从 C 开始,现在开始喜欢 JavaScript 和一点点 PHP。最近我经常听到“私有(private)”和“公共(public)”功能这两个术语。任何人都可以解释这两者以及它们如何对程序员有用吗?
我在这里可能完全错了......但是
(function(){})
在 javascript 中一个私有(private)函数?
最佳答案
术语“公共(public)”和“私有(private)”在 Javascript 中并不适用。关键是:你有办法引用一些你知道存在的函数吗?也就是说,您能否通过名称引用它(直接引用或作为您可以引用的另一个对象的属性)?如果是这样,恭喜你,你可以调用函数了。如果没有,那么你不能。
这意味着函数的“公开性”不是静态的,就像在 Java 或 C 中那样。考虑:
var x = (function() {
function maybePrivate() { return "my privates!"; }
return {
getMyPrivates: function() {
var rv = maybePrivate;
this.getMyPrivates = function() { return null; };
return rv;
}
};
})();
奇怪。所以现在“x”是一个对象,你可以看到那里有一个“maybePrivate”函数。但是,这个名称 — “maybePrivate” — 对您没有任何好处,因为从外部 x 您不能使用该名称来访问该函数。
但是,那个奇怪的对象有另一个函数,称为“getMyPrivates”,您可以使用它。当您调用它时,您会得到对“maybePrivate”函数的引用,然后您可以使用它来调用该函数。现在,“maybePrivate”仍然是私有(private)的吗?好吧,如果你这样做:
alert(x.getMyPrivates()());
你会看到“我的隐私!”信息。所以看起来“maybePrivate”不再那么私密了。但是,如果您再次尝试该操作,它将不起作用,因为“getMyPrivates”在第一次调用后安排自身被虚拟化。
那次窥镜之旅的目的是说明 Javascript 是动态的。唯一真正“静态”的是,一旦您将函数密封在闭包中(如上例中的“maybePrivate”),您就无法强制从外部显示它对象(至少,不是没有经过一些非常曲折的扭曲;语言是如此糊涂以至于声称某事是“不可能的”是危险的:-)。示例中的对象可以选择公开其“私有(private)”内容,但也可以选择不公开。
关于php - 私有(private)函数和公共(public)函数有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2648500/