首页 > 其他分享 >动态执行JS-把字符串当做代码去执行

动态执行JS-把字符串当做代码去执行

时间:2024-05-26 18:23:26浏览次数:13  
标签:script 作用域 代码 JS zhiXing 字符串 执行 strCode

使用 eval 将字符串当做代码来执行
function zhiXing(strCode){
    eval(strCode)
}
zhiXing("console.log('hello')")

在控制台会输出: hello

eval 的简单介绍

1,eval是同步代码
2,eval()执行代码时,读取变量是当前作用域;
 他会先去找当前作用域中有没有这个值;如果有就获取,如果没有往上一级作用域中去找

使用 eval 将字符串当做代码来执行-当前作用域

let a =3
function zhiXing(strCode){
    eval(strCode)
}
zhiXing("console.log('hello',a)")
// 输出的是3
解释: 他会先去找当前作用域中有没有这个值; 如果有就获取,如果没有往上一级作用域中去找

setTimeout 的简单介绍

1, setTimeout(a, number) 如果第一个参数接受的是字符串,会把字符串当做代码来执行;异步的
2,setTimeout(a, number)执行代码时,读取变量是全局作用域;

使用 setTimeout 将字符串当做代码来执行

let a =10
function zhiXing(strCode){
    let a = 4
    setTimeout(strCode,0)
}
zhiXing("console.log('hello',a)")
// 输出的是10;因为读取变量时,是全局作用域

使用 setTimeout 将字符串当做代码来执行-全局作用域

 function zhiXing(strCode){
    let a = 10
    setTimeout(strCode,0)
}
zhiXing("console.log('hello',a)")
// 报错,a is not defined 因为:setTimeout执行代码是全局作用域,而不是当前作用域

创建script来执行代码-同步的-读取变量时是全局作用域

let a =10
function zhiXing(strCode){
    let script = document.createElement('script')
    script.innerHTML = strCode
    document.body.appendChild(script)
}
zhiXing("console.log('hello',a)")
创建script来执行代码,同步执行,读取变量时是全局作用域

通过new Function 来执行代码 - 同步的 - 读取变量时是全局作用域

let a = 100
function zhiXing(strCode){
    let fn =new Function(strCode)
    fn()
}
zhiXing("console.log('hello',a)")
// 输出100
通过new Function 来执行代码,同步执行,读取变量时是全局作用域

创建 script 来执行代码与 new Function 的区别

script 会创建一个标签, new Function不会;
他们两个推荐使用  new Function;

标签:script,作用域,代码,JS,zhiXing,字符串,执行,strCode
From: https://www.cnblogs.com/IwishIcould/p/18214089

相关文章

  • 轻松拿捏C语言——【字符串函数】的使用及模拟实现
    ......
  • 测试进程A是否可以执行关联的响应接口
    设计两个程序,要求进程A中自定义信号SIGUSR1的响应接口,要求进程B每隔一段时间向进程A就发送SIGUSR1信号,测试进程A是否可以执行关联的响应接口。/*******************************************************************************************************@filename: :pro......
  • JS-简易ATM制作,--continue和break的区别
    1.简易ATM制作可使用两种策略:switch-case方法或if的方法,实质上都是一样的。我在写的时候用flag来控制 while循环,如果选择退出则修改flag=0,循环也就是程序结束,其他选择则flag不变,可继续选择其他的操作。money初始的值可以自定义。注意:由于prompt获取来的是字符(串)类型,进......
  • Go字符串及字符串拼接的反汇编代码解读
    Go字符串及字符串拼接的反汇编代码解读源代码packagemainfuncmain(){s:="helloworld"s+="go\n"print(s)}Go版本jagitch@34c4dd4d4a3e:str-demo$goversiongoversiongo1.22.2linux/amd64运行jagitch@34c4dd4d4a3e:str-demo$gorun......
  • 几种常用的配置文件格式对比分析——ini、json、xml、toml、yaml
    配置文件用于存储软件程序的配置信息,以便程序能够根据这些信息进行自定义和调整。常用的配置文件格式包括INI、XML、JSON和YAML。下面对它们进行简单介绍,并分析各自的优缺点。1.INI文件格式简介:INI(Initialization)文件是一种简单的配置文件格式,通常由节(section)、键(key)和......
  • 命令执行漏洞概述
    一、基本定义:命令执行漏洞是指攻击者可以随意执行系统命令,分为远程命令执行(远程代码执行)和系统命令执行两类。二、原理程序应用有时需要调用一些执行系统命令的函数,如PHP中的system、exec、shell_exec、passthru、popen、proc_popen等,当用户能控制这些函数中的参数时,就......
  • 小猴编程周赛C++ | 字符串价值
    学习C++从娃娃抓起!记录下在学而思小猴编程学习过程中的题目,记录每一个瞬间。侵权即删,谢谢支持!附上汇总贴:小猴编程C++|汇总-CSDN博客【题目描述】一个字符串的价值定义为:该字符串所有字母价值之和,一个字母如果在字符串中是第一次出现,则该字母的价值为2,否则价值为1,并且......
  • 详细分析crontab定时执行任务(附Demo | 定时清空Tomcat的实战)
    目录前言1.基本知识2.Demo3.实战3.1错误版本3.2正确版本前言由于用户量大,且导出的日志以及缓存特别多,急需定期删除文件1.基本知识crontab是一个用于定时执行任务的命令行工具,通常在Unix和类Unix系统中可用,表示一个包含需要定时执行的任务列表的表格......
  • KPM算法求字符串的最小周期证明
    先给出公式ans=n-LPS[n-1]其中ans为最小周期,n为给出的由假设的周期字符串中提取出的子串长度,LPS为前缀函数,n-1为字符串最后的位置下标证明如下证明ans=n-LPS[n-1],思路:(1)证明特殊情况,即先对完整周期字符串进行证明,这时候的字符串组成是[1][2][3][4],即4个......
  • 使用树梅派搭建Golang、Python、NodeJs的开发服务器
    使用树梅派搭建Golang、Python、NodeJs的开发服务器安装系统安装rpi-imagersudoaptinstallrpi-imager打开rpi-imager烧写RaspberryPiOSLite(64-bit)系统设置好用户名、密码、wifi、ssh等信息上电修改镜像源备份/etc/apt/sources.listsudocp/etc/apt......