最近,在阅读 jQuery 之父 John Resig 力作:Secrets of the JavaScript Ninja(JavaScript忍者秘籍)。关于第九章提及的 JavaScript 之运行时代码,感觉蛮不错。因此,顺便在博客园记录一下。

有关运行时、编译时就不再做过多介绍,相信,大部分同学或多或少熟悉一门强类型语言,比如:C#、Java 之类。就以 C# 为例,程序员编写的 .cs 文件最终将编译成 .dll 程序集中,如果 .cs 中有语法错误,将无法编译通过。而像 JavaScript 为动态语言,则强调运行时,如果代码有语法错误之类,一定要在程序运行时,才会抛出错误。当然,在 C# 中,程序员可利用反射进行运态创建对象之类。

在 JavaScript 中,可利用 eval、Function、setTimeout、DOM Script 标签,在运行时候动态执行字符串代码。

一  eval

将一个JavaScript代码字符串求值成特定的对象(来自火狐开发者文档中心)。尼玛,感觉还是听起点有点听不懂。

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/eval

不过,目前就个人使用来看,eval 常用于 ajax 请求中,用于 JSON 字符串反序列化之用。具体可        见: http://www.cnblogs.com/Lumia1020/p/4952964.html

二  Function

在 JavaScript 中,除了直接定义 function 函数,其实还可通过 Function 构建函数。(在 JS 中,函数其实是通过 Function 构造器创建)

new Function ([arg1[, arg2[, ...argN]],] functionBody) arg1、arg2、、、形参参数,functionBody 函数体 参数为字符串类型

    https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function

三 setTimeout

   通过火狐开发者文档中心可知,同 eval 一样,setTimeout 同样支持传入字符串参数。

https://developer.mozilla.org/zh-CN/docs/Web/API/Window/setTimeout

 四 DOM Script 标签

没看过此书前,确实还不知有此种方法执行 JavaScript 字符串代码方法,利用 Script 标签 DOM API 实现。

 function createScriptTag(strData)
{ var scriptTag=document.createElement('script'); scriptTag.type='text/javascript'; scriptTag.text=strData; document.getElementsByTagName('head')[0].appendChild(scriptTag); }

《Secrets of the JavaScript Ninja》:JavaScript 之运行时代码的更多相关文章

  1. JavaScript忍者秘籍——运行时代码求值

    1. 代码求值机制 JavaScript中,有很多不同的代码求值机制. ● eval()函数 ● 函数构造器 ● 定时器 ● <script>元素 - 用eval()方法进行求值 作为定义 ...

  2. JavaScript 对引擎、运行时、调用堆栈的概述理解

    JavaScript 对引擎.运行时.调用堆栈的概述理解  随着JavaScript越来越流行,越来越多的团队广泛的把JavaScript应用到前端.后台.hybrid 应用.嵌入式等等领域. 这篇文 ...

  3. 如何将oc代码转换成运行时代码

    // 运行时 其实就是oc的底层  平时写的代码 最终都是转成底层的运行时代码以下面程序为例子: 如果我们想要看我们的main.m文件底层转换成了怎样的运行时代码 ,我们可以这样做. 1.打开终端  ...

  4. webpack学习:uni运行时代码解读一 (页面初始化加载)

    uni的vue代码是如何在微信小程序里面执行的,对此比较感兴趣所以去调试学习了一波. 准备工作 // 在vue.config.js里打开非压缩的代码 module.exports = { config ...

  5. 解读JavaScript 之引擎、运行时和堆栈调用

    转载自开源中国 译者:Tocy, 凉凉_, 亚林瓜子, 离诌 原文链接 英文原文:How JavaScript works: an overview of the engine, the runtim ...

  6. 解读 JavaScript 之引擎、运行时和堆栈调用

    https://www.oschina.net/translate/how-does-javascript-actually-work-part-1 随着 JavaScript 变得越来越流行,很多团 ...

  7. Runtime运行时机制

    Runtime 又叫运行时,是一套底层的 C 语言 API,其为 iOS 内部的核心之一,我们平时编写的 OC 代码,底层都是基于它来实现的 我们需要了解的是 Objective-C 是一门动态语言, ...

  8. 读Secrets of the JavaScript Ninja(二)对象

    面向对象和原型 理解原型 在JavaScript中,可通过原型实现继承.原型的概念很简单.每个对象都含有原型的引用,当查找属性时,若对象本身不具有该属性,则会查找原型上是否有该属性. 每个对象都可以有 ...

  9. 《JavaScript Ninja》之正则表达式

    正则表达式 是一个拆分字符串并查询相关信息的过程. 练习网站:JS Bin 正则表达式测试网站:Regular Expression Test Page for JavaScript 正则表达式进修 ...

随机推荐

  1. order by多个字段对索引的影响

    某前台sql语句,简化后如下SELECT products_name,products_viewed FROM `products_description` ORDER BY products_vie ...

  2. 页面异步加载javascript文件

    昨天听一同事说的异步加载js文件,可以提高页面加载速度.具体方法如下:(function() {  var ga = document.createElement('script'); ga.type ...

  3. div错位解决IE6、IE7、IE8样式不兼容问题

    IE6里DIV错位的问题       采用”FLOAT:LEFT“的DIV在IE8.IE7.都没问题,IE6下却向下移动,出现空白.这是因为,IE6采用的内核默认把DIV之间的距离增加了3~5个PX, ...

  4. Connection failed: NT_STATUS_ACCOUNT_RESTRICTION

    今天在linux机器上想要远程重启一台window的机器,输入命令后报错,如下 Google了下,有说是window禁止远程空密码登录,于是到window系统中添加了密码,这下再运行 这下执行就正常了

  5. shell语句记录-awk

    cat ./daily_uv/daily_uv_20140104 | awk '{fr[$1]+=$3; k=$1 "_" $2; av[k]+=$3;} END{for (k i ...

  6. [WebService]之TCPMon的使用

    TCPMon是apache下的一个项目,下载地址:http://ws.apache.org/commons/tcpmon/download.cgi (1)功能: TCPMon可以拦截客户与服务之间的H ...

  7. iOS UITableView UIScrollView 的支持触摸事件

    在使用了 UITableView 或UIScrollView的controller 里无法响应触摸事件touch事件, 自定义tableView.scrollView #import <UIKi ...

  8. Google Glass应用开发探索

    摘要:2012年6月的Google开发者大会上,作者有幸预定到了Google Glass.8个月后,她收邀参加了Google纽约总部举行的Google Glass Foundry开发大赛.在为期两天的 ...

  9. Lync激活用户遇到ConstraintViolationNoLeadingOrTrailingWhitespace错误

    启用用户的时候出现错误ConstraintViolationNoLeadingOrTrailingWhitespace,如下图 解决方案:域控中,该用户的名字最后多出了个空格,批量生成域用户的脚本问题 ...

  10. js运动 多数据运动 含JSON

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...