js 把字符串当函数执行的方法

在某些情况下,传递函数名之后,接收的不是函数而是函数名的字符串类型;

解决方法:

1. eval
eval方法—用来执行字符串代表的 javascript 代码。
如果传递的不是字符串的话,会直接返回传值,而非调用。

例如:

function test(str){ 
alert(str); 
} 
//如果param是值;
eval('test("param")'); 
//如果param是变量;
var param = 'B';
eval('test(param)'); //会查找名为param的变量,如果找不到会抛出异常

2. 把方法名看成属性名就行了
由于eval 效率低下以及不安全性,正常情况下我们并不会直接使用这种方法来调用一个函数。由于函数在javascript 里面可以被保存在对象中,因此通过对象的属性访问将会是更好的选择。

说明:

  1. 全局函数声明会变成全局对象的属性。
    全局对象是在进入执行上下文前创建的一个唯一的对象。
    在浏览器运行环境中,全局对象就是window对象。
  2. 属性访问可以使用 点标记法 或者 括号标记法 ,其中,使用点访问时需要使用标识符,而使用括号访问时使用的是标识符对应的字符串。

例如:

function test(str) { 
    alert(str); 
} 
window['test']('param'); //直接执行

window['test'].call(this,'param');//如果需要修改函数运行时的this

如果函数是其他对象的属性,也是同理调用。

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 1,525评论 0 4
  • 以布帛求染者,必書姓氏一角。染人疊而結之,不令占色也。主者來索,則按姓氏與之。 有一謎雲,身居色界中,不染色界塵,...
    古阳阅读 52评论 0 0
  • 1 很多人都有这样的想法:等我准备好了,啥事都可以。 这句话说了几年了,但还是没有能看见改变或者改变带来的成功。 ...
    林大俊阅读 75评论 0 2
  • 2017.11.19 今天第一次用了总结笔记,做了复盘。反思:(1)对于充值水费这种可充可不充的事,就不列入进...
    遐姐教你职场时间管理阅读 31评论 0 0
  • 印度宗教以及佛教把经验世界称为玛雅,或说摩耶,只是音译不同。破除了玛雅,达到梵我一如的境界,就脱离了轮回之苦。玛雅...
    张家和阅读 352评论 0 3