前端面试题:如何使字符串可执行

这是一道今年腾讯春招的面试题。当考官一开始问我这道题的时候,我没有反应过来,什么叫使字符串可执行。好吧,请原谅我的无知。考官耐心的解释,字符串可执行的意思是将字符串转为立即执行的代码,如字符串var a=23;,使其经过某种操作后确实有个值为23的a变量。听了面试官的话后,我第一时间想到了eval方法。然而面试官并不满意,追问我还有其他方式吗,我一时没有想起来。面试过后我就想总结一下这个问题,不过因为拖延症,拖到今天才写,敬请见谅。本文内容主要借鉴《JavaScript忍者秘籍》中使字符串转为立即执行的代码一节。下面将讲述字符串可执行的四种方式。

1. eval()方法

eval()方法是一个很强大的方法,它接收一个字符串作为参数,当解析器发现代码中调用该方法时,会将传入的参数当作ECMAScript语句来解析,然后把执行结果插入到原位置。如代码eval('var str="hi"');,执行了这个语句后,就可以直接使用变量str了,如console.log(str)将输出”hi”。不过关于这个方法有以下几点要注意:

(1). 通过该方法执行的代码有与该执行环境相同的作用域链。这意味着它可以引用在包含环境中定义的变量。也意味着它可以形成闭包,这与下文的Function方法形成对比。

var str="hi, I'm student!";
eval('console.log(str)');
//output:hi, I'm student!

(2). 在eval()中创建的任何变量或函数都不会被提升。这很好理解,因为它只有在解析之后才会运行。

f1()    //Uncaught Ref
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值