如何执行字符串形式的js代码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何执行字符串形式的js代码相关的知识,希望对你有一定的参考价值。

比如ajax,通过a页面请求服务器然后得到b页面的代码,b页面的代码中包含有js代码,然后我将获得的b页面的代码插入到c页面中,想让b页面中的js代码能够在c页面中执行

可以使用javascript自带的eval() 方法。

定义和用法

eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。

语法

eval(string)

参数

string    必需。要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句。    

返回值

通过计算 string 得到的值(如果有的话)。

例子:
<script type="text/javascript">
    eval("x=10;y=20;document.write(x*y)")   
    document.write(eval("2+2"))    
    var x=10
    document.write(eval(x+17))
</script>

输出:
200
4
27
参考技术A 第一种方式
var str=" var sum = 1 + 2 ";
eval(str);
alert(sum)

第二种方法
把方法写入到a页面中,b页面中直接调用。

a 页面中提交到b页面。并且在隐藏帧处理,那么只需要在b页面中返回parent.fa1();就会调用a的代码
<script>
function fa1() alert('A');
</script>
<form name="fm" ation="b页面" target="framesubmit">
</form>
<iframe name="framesubmit" height=0 width=0 />

还有其它的解决方法 不说了就本回答被提问者和网友采纳
参考技术B

第一种方式

var str=" var sum = 1 + 2 ";

eval(str);

alert(sum)

第二种方法

把方法写入到a页面中,b页面中直接调用。

a 页面中提交到b页面。并且在隐藏帧处理,那么只需要在b页面中返回parent.fa1();就会调用a的代码

<script>

function fa1() alert('A');

</script>

<form name="fm" ation="b页面" target="framesubmit">

</form>

<iframe name="framesubmit" height=0 width=0 />

参考技术C 说的有点绕:
用INCLUDE_ONCE FILE_GET_CONTENTS()试试
呵呵
我也不太懂
参考技术D setTimeout("(代码)",0)

JS预解释的总结

  • 预解释阶段发生在创建了堆内存,让代码执行之前,对当前作用域中带var和function的进行预解释

    • 在浏览器解析执行代码的时候,会提前把带var和function的代码声明或定义,提前放在作用域的最前面执行,也就是浏览器把对这些变量的声明提升到作用域的最前面
    • 函数数据类型会在预解释阶段同时声明和定义
      • 浏览器会将函数的定义以字符串的形式存在一个新的命名空间(堆内存)
    • 在函数执行中,函数的形参也会进行预解释,相当于var 形参
    • 在判断体中
      • 无论判断是否成立,里面的代码都进行预解释,但是不进行定义(包括function)
      • 在新版本浏览器中,只要条件成立,他就会把函数执行(类似于在条件体内进行预解释)
    • 在函数表达式中,等号右边的function不进行预解释
    • 自执行函数不进行预解释,但是在他执行的时候开辟的栈内存进行预解释
    • 在函数执行的时候,return后边紧紧跟着的不进行预解释,但是在return下面的依然进行预解释,但是不执行不赋值
    • 变量名不能重复,变量当前的作用域中,同名的变量声明,会覆盖之前的声明
    • 不带var的变量,不进行预解释,相当于给window动态添加了一个属性
      • 当代码执行到这的时候,才进行创建变量并赋值这个过程,所以在创建之前的调用,会报错,变量 is not defined.
    • 在预解释的时候,同一个名称的变量,如果都是通过var声明的,之前声明过,后边的声明就不重新在声明,如果是function,后边会重新声明和定义,但是后边的定义会覆盖前边的
  • var num = 2;

    • 第一步:声明这个变量(预解释这一步)
    • 第二步:给num这个变量赋值2
  • 函数执行过程

    • 首先进行预解释,形参和函数私有作用域中带var和function进行提升
    • 如果形参在预解释时被function重叠了,那么形参消失,不能使用那个形参接受传入函数的实参
    • 代码开始从上到下执行,给形参赋值,代码接着往下执行
    • return下面的代码不执行了,返回值,返回产出

以上是关于如何执行字符串形式的js代码的主要内容,如果未能解决你的问题,请参考以下文章

javascript算术运算符详解

面向对象-作用域

面向对象

如何执行字符串的PHP代码

面向对象的-作用域

python中执行字符串形式的语句和字符串形式的表达式方法(即exec和eval方法)