JavaScript可以指它自己吗?

JavaScript可以指它自己吗?,javascript,Javascript,一段JavaScript代码是否可能引用自身?也就是说,我能否以编程方式构建一个变量,使其值成为声明它的JavaScript文件的原始文本内容?试试 (function foo() { var f = foo.toString(); return f; })() 其中f是您描述的变量。这也会以字符串的形式返回,只是为了更好的度量 一段JavaScript代码是否可能引用自身 函数可以使用arguments.callee(ECMA-262 10.6)引用自身。我认为它在严格模式下不可用,但这不应

一段JavaScript代码是否可能引用自身?也就是说,我能否以编程方式构建一个变量,使其值成为声明它的JavaScript文件的原始文本内容?

试试

(function foo() { var f = foo.toString(); return f; })()
其中
f
是您描述的变量。这也会以字符串的形式返回,只是为了更好的度量

一段JavaScript代码是否可能引用自身

函数可以使用arguments.callee(ECMA-262 10.6)引用自身。我认为它在严格模式下不可用,但这不应该是一个太大的问题。您可以调用函数的toString方法来获取函数的
依赖于实现的表示形式
,它通常是一个与创建它的源代码等效的字符串,但可能不是

也就是说,我能否以编程方式构建一个变量,使其值成为声明它的JavaScript文件的原始文本内容

不是一般意义上的,例如,你不能:

var x = 'x';
getVaue(x); // var x = 'x';
如果这就是你的意思

(function () { return arguments.callee.toString(); })()
与所选答案几乎相同,没有字符串的变量存储或函数名。两者都不是指自己。不能像
$(this.closest('script')
这样引用DOM中的JS文件


您所能做的类似于:

如上所述,这是因为DOM按顺序加载脚本。您可以像
w.stored[0]
那样引用所有执行此操作的脚本。使用jQuery可以执行
$(w.stored[0]).text()


jQuery$slector正在引用jQuery本身。那么,很快-是的。@Milo…什么?OP:你能解释一下你想做什么吗?JavaScript并不完全是为元编程而设计的。@这取决于你所说的“元编程”是什么意思;原型和
eval
的组合还不错。如果使用“$”作为选择器,我希望$(“$”)引用标记名为“$”的元素数组,该标记名在HTML或XML中不是有效的标记名,因此应该返回没有元素的jQuery对象。使用$作为对“jQuery自身”的引用只是引用对象的全局变量的一个示例。@jQuery开发版本的Matt Ball在最后一行“window.jQuery=window.jQuery=window.$=jQuery;”之前的一行,它是对自身的引用,不是吗?我可以像上面所做的那样将所有内容封装在一个自执行函数中。谢谢,小心点。在函数表达式中,不同浏览器对可选名称的处理方式不同:在IE中,表达式被视为函数声明,因此之后会有一个全局变量foo引用函数。在其他浏览器中,函数名只能从函数内部访问,没有全局变量存在(它可能是作为局部变量对象的属性创建的)。为了确保浏览器之间的一致性,最好使用匿名函数和参数。被调用方从内部引用函数。请注意,
参数。被调用方
已弃用,在严格模式下访问不合法,这就是我没有在上面使用它的原因。chuckj-被调用方未弃用,它是在ES 5和Mozilla中定义的,您可能会对caller属性感到困惑。它在严格模式下不可用,但对于一般web来说无论如何都不可行。请阅读ECMA标准第10.6节步骤14.c。该部分的注3以散文形式描述了正在做的事情。如上所述,我在回答时考虑了ES5和Mozilla的JavaScript引用。Neiter文档说被调用方已被弃用,或者将来有任何这样做的意图。MDC文档说,调用方已经过时,将其包含在ES5中似乎是专门为阻止其复活而设计的。无论如何,被调用方在标准或JavaScript中都不是不推荐的™.
var w      =  window;
w.stored   =  [];
w.scripts  =  document.getElementsByTagName('script');
w.stored.push(w.scripts[ w.scripts.length - 1 ]);