Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在脚本中循环一个单词并对其进行更改_Javascript - Fatal编程技术网

Javascript 在脚本中循环一个单词并对其进行更改

Javascript 在脚本中循环一个单词并对其进行更改,javascript,Javascript,我想知道是否有可能在javascript中替换一个单词的所有实例。比如说,我想用fn替换“function”的所有实例。我知道这样做会使我的函数无用,但这只是举个例子 所以我的问题是,1。如何访问脚本本身中的文本?脚本遍历,类似于我们遍历节点树的方式 2.我认为这样的行为会带来安全风险,对吗 假设您有这样一个脚本: var x = function () { function y () { // ... } } 您可以像访问任何其他元素一样访问脚本元素。但是,

我想知道是否有可能在javascript中替换一个单词的所有实例。比如说,我想用fn替换“function”的所有实例。我知道这样做会使我的函数无用,但这只是举个例子

所以我的问题是,1。如何访问脚本本身中的文本?脚本遍历,类似于我们遍历节点树的方式

2.我认为这样的行为会带来安全风险,对吗

假设您有这样一个脚本:

var x = function () {

    function y () {
       // ...
    }

}

您可以像访问任何其他元素一样访问
脚本
元素。但是,它将只包含一个文本节点,即脚本本身

您可以在文本节点上执行以下替换操作:

var x = function () {

    function y () {
       // ...
    }

}
var x=函数(){
console.log('我还在工作!');
函数y(){
// ...
}
}
var script=document.getElementsByTagName('script')[0];
script.textContent=script.textContent.replace(/function/g,'fn');
document.querySelector('pre').textContent=script.textContent.trim();
x()//我还在工作

您可以使用
eval

看看这个:

myScript = myScript.replace("foo", "bar");
myScript = myScript.replace("9999", "0000");
eval(myScript);
myFunc();
现在,您可以通过
myFunc()

这里很有趣

myScript
中的名称
foo
更改为
bar
,将数字更改为
0000

myScript = "function foo() {console.log(9999)}";
eval(myScript);
myScript = "function bar() {console.log(0000)}";
eval(myScript);

foo();
bar();
功能
bar
执行并打印
0000

myScript = "function foo() {console.log(9999)}";
eval(myScript);
myScript = "function bar() {console.log(0000)}";
eval(myScript);

foo();
bar();
有很多其他方法可以做到这一点。例如,您可以使用JQuery getScript,并在这方面做一些创造性的工作


更新

把答案再进一步

我想使用变量
myFunc

要理解,请运行以下代码段


现在猜猜我为什么使用
myFunc

为什么会被否决?脚本不可能遍历它自己。我猜您所描述的是
缩小
。有工具可以做到这一点,但正如@JonathanBrooks所说的,穿越自我是不可能的。我告诉你我为什么要问这个。我在考虑为像“让”这样的事情制定后备方案。因此,如果let不受支持,那么我将用var替换let的所有实例。这听起来很疯狂,但这正是这类事情可能有用的地方。更改标记中的脚本会改变可执行脚本本身吗?我们必须使用准备好的语句还是PHP中的类似语句?我的意思是什么是安全风险安全风险可能取决于浏览器。在使用我的示例的Chrome中,
x()
在我更改文本内容后仍然被定义。您可以使用此方法编写JavaScript解析器,该解析器可以将代码翻译成另一种语言。(虽然这将是一个相当大的工作。)这似乎是缓存的一个问题。不过,必须有一些功能来刷新缓存或重置整个内容而不刷新页面,这样就可以解决这个问题。我知道dom元素的遍历,但是可以遍历外部js文件并在那里更改文本吗?顺便说一下,请阅读下面答案中的一些注释。很好,我是新来的eval,自从我听说它是“代码中的魔鬼”后,我从未真正接触过它,但是嘿,它太棒了。任何安全问题以及如何在您的解决方案中避免这些问题?尽管脚本本身不起作用,因为它是一个字符串。你能解释一下它是如何工作的吗?请参阅“eval”文档。这是一个有效的例子。我避免使用第三方库。我喜欢白手起家地做事。所以,嘿,我收到的第一个答案有一个问题,即当我更改某些内容时,无法保证脚本会自动更新。eval技术也是这样吗?我的意思是浏览器会尽可能地缓存脚本。我会查看文档。当然,这些示例非常有效。我只想知道这样做的利弊,我会接受你的回答:)