3. eval eval用来直接执行一个字符串,因为它有性能和安全性的问题,并且使得代码更难阅读,因此应避免使用,直接将字符串写在代码行即可。...9. function语句 在Javascript中定义一个函数,有两种写法: function foo() { } 和 var foo = function () { } 两种写法完全等价。...11. new语句 Javascript是世界上第一个被大量使用的支持Lambda函数的语言,本质上属于与Lisp同类的函数式编程语言。但是当前世界,90%以上的程序员都是使用面向对象编程。...myCat = new Cat('mimi'); 这种利用函数生成类、利用new生成对象的语法,其实非常奇怪,一点都不符合直觉。...但是在Javascript中,void是一个运算符,接受一个运算数,并返回undefined。 void 0; // undefined 这个命令没什么用,而且很令人困惑,建议避免使用。
3. eval eval用来直接执行一个字符串。这条语句也是不应该使用的,因为它有性能和安全性的问题,并且使得代码更难阅读。 eval能够做到的事情,不用它也能做到。...9. function语句 在Javascript中定义一个函数,有两种写法: function foo() { } 和 var foo = function () { } 两种写法完全等价。...11. new语句 Javascript是世界上第一个被大量使用的支持Lambda函数的语言,本质上属于与Lisp同类的函数式编程语言。但是当前世界,90%以上的程序员都是使用面向对象编程。... var myCat = new Cat('mimi'); 这种利用函数生成类、利用new生成对象的语法,其实非常奇怪,一点都不符合直觉。...但是在Javascript中,void是一个运算符,接受一个运算数,并返回undefined。 void 0; // undefined 这个命令没什么用,而且很令人困惑,建议避免使用。 (完)
最后,在内置 eval 函数中的文本被解析为 Eval code....Safari 2.x 甚至有更多的问题 —— 删除非引用(例如delete 1;)将会抛出错误; function 声明会创建 可删除的 properties (但奇怪的是,variable 声明就不能删除...看看误解彼此反弹也是有趣的,在同一 thread 中有人首先建议删除变量(当然是行不通的,除非是在 eval 中声明),然后另一个人提供了 一份错误的修正 可以如何在全局代码中删除变量而不是Function...Safari 2.x 甚至有更多的问题 —— 删除非引用(例如delete 1;)将会抛出错误; function 声明会创建 可删除的 properties (但奇怪的是,variable 声明就不能删除...看看误解彼此反弹也是有趣的,在同一 thread 中有人首先建议删除变量(当然是行不通的,除非是在 eval 中声明),然后另一个人提供了 一份错误的修正 可以如何在全局代码中删除变量而不是Function
想起以前RISC大多不支持奇边界存取值,比如ARM,于是在内核中用中断处理强行支持奇边界错误,虽然效率低了很多,但逻辑上是通过的。...Common Lisp 测完Scheme,再来测Scheme的本家兄弟,另外一种Lisp——Common Lisp 先用Common Lisp实现add,因为Common Lisp将数据和过程用不同的命名空间...RESET 因为没有尾递归优化的规定,所以对于那种无限循环,Common Lisp只能选择迭代才能保证不崩栈,比如使用do。...sbcl是Common Lisp的另外一个实现,在这个实现中,我们使用第一个add函数的版本,没有发生崩栈。...也终于给了我们一个更为靠谱的Common Lisp的实现。
关于 本文是系列文章中的第四篇,发布在业余程序员的个人修养这个专栏中: 柯里化的前生今世(一):函数面面观 柯里化的前生今世(二):括号神教 柯里化的前生今世(三):语言和同像性 ...格林斯潘第十定律: 任何C或程序复杂到一定程度之后,都会包含一个临时开发的、不合规范的、充满程序错误的、运行速度很慢的、只有一半功能的Common Lisp实现。 ...,eval-lambda) (,is-function-call-list?...,eval-function-call-list)))) 和其他解释器的教材不同的是,我没有写那么多的if-else, 而是把决策模式提取出来了,这样会更清晰一些。 ...eval-exp会根据exp的具体形式,寻找相应的处理方式, 而各个处理方式中,还有可能再用到eval-exp来处理子表达式。 因此,这是一个递归执行的过程。
/lib/list/294 segmentfault:https://segmentfault.com/t/lisp common-lisp:https://common-lisp.net/ 一个国外教程网...2)《ANSI Common LISP》Paul大神的作品,他的《黑客与画家》是必读的经典,会改变三观的说。...4)《Practical Common Lisp》大神田春翻译的中文版《实用Common Lisp编程》已经出版。 5)《On Lisp》也是Paul大神的作品,好像是进阶修炼版本。...8)《Artificial Intelligence :A Modern Approach》《人工智能:一种现代方法》看了个开头,从人工智能在各个学科中的基础开始,一开始就来列人名了,哲学,数学,心理学...很有意思 9)《Common Lisp:The language》,堪比C++ Primer的长度,1100多页,大神说犹如高峰,待攀。
这种数据即程序、程序即数据的概念,使得Lisp可以轻松地自定义宏. 不妨来看一下Lisp定义宏的示例: ; 使用defmacro定义一个nonsense宏, 接收一个function-name参数....,这里有一个Javascript的实现 注意:宏一般在编译阶段被展开, 下面代码只是为了协作你理解上述的Lisp代码 function nonsense(name) { let rtn eval...因为它专注于具体的 AST 节点,见下文 另外,当配置出错时,Macro可以得到更好的错误提示 有利有弊,Babel Macro 肯定也有些缺陷,例如相对于插件来说只能显式转换,这样代码可能会比较啰嗦,...例如: import evalm from 'eval.macro' const x = evalm` function fib(n) { const SQRT_FIVE = Math.sqrt(5...: true, value: 10 } t.evaluate(parse("!
: Call to undefined function Think\C() in /www/ThinkPHP/Library/Think/Think.class.php:347 Stack trace...: # 这个错误,百度了一番基本没有有效的答案。...PHP原生的,注释掉试试能不能得到更多错误。...Parse error: syntax error, unexpected 'public' (T_PUBLIC), expecting end of file in //www/ThinkPHP/Common...删掉public果然解决了这次的奇怪问题。
LISP有很多种方言,各个实现中的语言不完全一样。1980年代Guy L. Steele编写了Common Lisp试图进行标准化,这个标准被大多数解释器和编译器所接受。...在Unix/Linux系统中,还有一种和Emacs一起的Emacs Lisp(而Emacs正是用Lisp作为扩展语言进行功能扩展的)非常流行,并建立了自己的标准。...LISP语言的主要现代版本包括Common Lisp和Scheme。 基本介绍 LISP 是第一個函數型程式語言,区别于C/Java等命令型编程语言。...在 Lisp 中我们习惯用原子 t 表示真,而用空表 () 表示假。...反之一个被引用的表仅仅被视为表 > (atom ‘(atom ‘a))() 引用看上去有些奇怪,因为你很难在其它语言中找到类似的概念,但正是这一特征构成了 Lisp 最为与众不同的特点——代码和数据使用相同的结构来表示
(); //OK } 2.3 使用非空断言操作符的注意事项 因为 ! 非空断言操作符会从编译生成的 JavaScript 代码中移除,所以在实际使用的过程中,要特别注意。...; 语句可以通过 TypeScript 类型检查器的检查。但在生成的 ES5 代码中,! 非空断言操作符被移除了,所以在浏览器中执行以上代码,在控制台会输出 undefined。...: numGenerator is not a function myFunc(undefined); // Error 若在浏览器中运行以上代码,在控制台会输出以下错误信息: Uncaught TypeError...: numGenerator is not a function at myFunc (eval at (main-3.js:1239), :3:16...) at eval (eval at (main-3.js:1239), :6:1) at main-3.js:1239 很明显在运行时,undefined
在eval 代码,Function 代码,事件处理属性,传入 setTimeout方法的字符串和包含整个脚本的块中开启严格模式会如预期一样工作。...当然也可以在代码中显式开启严格模式, 但这样做并不是必须的. function strict1(str){ “use strict”; return eval(str); // str中的代码在严格模式下运行...语法错误 eval(“var y; delete y;”); // !!! 语法错误 让eval和arguments变的简单 严格模式让arguments和eval少了一些奇怪的行为。...两者在通常的代码中都包含了很多奇怪的行为: eval会添加删除绑定,改变绑定好的值,还会通过用它索引过的属性给形参取别名的方式修改形参....语法错误 f2(); } function baz() { // 合法 function eit() { } // 同样合法 } 这种禁止放到严格模式中并不是很合适,因为这样的函数声明方式从
LispReader.java 一般来说,具有复杂语法的编程语言会把词法分析与语法分析分开实现为 Lexer 与 Parser,但在 Lisp 家族中,源程序的语法就已经是 AST 了,所以会把 Lexer...与 Common Lisp 不同,普通用户无法扩展 Clojure 里面的read table。...关于扩展read table的好处,可以参考 StackOverflow 上的 What advantage does common lisp reader macros have that Clojure...macroexpand Macro 毫无疑问是 Lisp 中的屠龙刀,可以在编译时自动生成代码: static Object macroexpand(Object form) { Object...(); i++) // 这里递归的求列表中每项的值 ret = (IPersistentVector) ret.cons(((Expr) args.nth(i)).eval
一、事件回放 今天工作时碰到了一个奇怪的问题,这个问题很早很早以前也碰到过,不过没想到过这么久了竟然又栽在这里。...打开浏览器的Network,排查,发现了一个奇怪现象 在preview里面看数据 ? 我的那句 success: true 怎么会变成 undefined: true。这是什么鬼。。。...(result) { success(eval('(' + result + ')')); // 使用eval解析了一下 }, error: function...在jQuery的api网站上看到了这么一句话 在 jQuery 1.4 中,JSON 格式的数据以严格的方式解析,如果格式有错误,jQuery都会被拒绝并抛出一个解析错误的异常。...也就是说 { "success": undefined } 这么一个JSON,是错误的。 3、对于number类型,表示的方法如下 ? 用科学计数法的时候会牵涉到。
在严格模式下,ECMAScript 3中的一些不确定的行为将得到处理,而且对于某些不安全的操作也会抛出错误。...(JavaScript高级程序设计) 设立严格模式的目的: 严格模式会将JavaScript陷阱直接变成明显的错误。 严格模式修正了一些引擎难以优化的错误。...以下的所有尝试将引起语法错误: "use strict"; eval = 17; arguments++; ++eval; var obj = { set p(arguments) {} };...语法错误 f2(); } function baz() // 合法 { function eit() { } // 同样合法 } 总结 严格模式虽然限制了一部分JavaScript书写和运行的自由...,但是随着JavaScript在更大的工程中扮演更重要的角色,规范化是必经之路。
这就不得不提起Clojure这门lisp方言,出于对lisp和函数式编程的痴迷,我选择了基于JVM的Clojure作为自己的偏好语言,而emacs天生为lisp而生。..."http://melpa.org/packages/")中的点号(dot)表示法也比较奇怪,其实这是lisp中的Dotted pair表示法,用法和普通的列表类似,但因为是pair的缘故,你可以使用(...模块化 如果把什么东西都揉到init.el文件中,这个文件一定会很快变得臃肿不堪。为了解决这个问题,需要引入模块化的思想——把特定功能的配置放到独立的文件中,然后require进来。...(add-to-list 'load-path (expand-file-name "lisp" user-emacs-directory)) 看似,接下来就可以在每个独立的模块文件中编写各种功能的配置...当你正在编译文件的时候,包中宏就会原地展开,然后被eval-when-compile宏加载进内存并被编译成字节码,供后续解析器执行。
tips:需要注意的是,在热更新模式下,会导致chunkhash和contenthash计算错误,发生错误(Cannot use [chunkhash] or [contenthash] for chunk.../src/a.js": function(module, __webpack_exports__, __webpack_require__) { eval( ...); // ..../src/a.js"))加载入口的 js,(上面可以观察到installedChunked变量的初始值是{a:0},),并通过eval执行 a.js 中的代码。.../src/asyncCommon1.js": (function(module, __webpack_exports__, __webpack_require__) { eval(module代码.....,对于当项目大到一定程度时,能有较好的效果 (水平有限,如有错误欢迎拍砖)
tips:需要注意的是,在热更新模式下,会导致chunkhash和contenthash计算错误,发生错误(Cannot use [chunkhash] or [contenthash] for chunk.../src/common1.js export function common1() { console.log(“common11”); } import(/_ webpackChunkName.../src/a.js": function(module, __webpack_exports__, __webpack_require__) { eval( ...); // ..../src/a.js"))加载入口的 js,(上面可以观察到installedChunked变量的初始值是{a:0},),并通过eval执行 a.js 中的代码。...,对于当项目大到一定程度时,能有较好的效果 (本文地址因水平有限,如有错误欢迎拍砖)
,VO也是活动地向AO,而在eval中的代码在执行时,其执行上下文也就是调用eval的上下文。 ...而对于VO这样的实体对象而言,它也有自己的元数据,也就是在ES5中对象的数据特性:[[configurable]],[[enurable]],[[value]],[[writable]]。...上述提到的第三种上下文--eval上下文,有个特殊的行为,就是在eval中声明的变量,函数可以在调用上下文中删除。...(function(){ eval('var foo = 1;'); foo; // 1 delete foo; // true typeof foo; // "undefined...删除未声明的 变量也会抛出语法错误SyntaxError。
如getComputedStyle()) 深度遍历 当然,直接添一个getValue()也能达到想要的效果,但getter对使用方更友好,外部完全不知道值是提前算好的还是现算的 delete的奇怪行为分为...至于evalX能被删掉的原因,就比较有意思了,需要了解几个东西:执行环境、变量对象/活动对象、eval环境的特殊性 执行环境 执行环境分为3种:Global环境(比如script标签圈起来的环境)、Function...) P.S.变量对象与活动对象这种“玄幻”的东西没必要太较真,各是什么有什么关系都不重要,理解其作用就好 eval环境的特殊性 eval执行环境中声明的属性和函数将作为调用环境(也就是上一层执行环境)的变量对象的属性存在...此外,还有一个有意思的尝试,既然eval直接拿外层的变量对象,而且eval环境声明的东西没有不能删天赋,那么二者起来,是不是能够覆盖强删?...var x = 1;/* Can't delete, `x` has DontDelete */delete x; // false typeof x; // "number"eval('function
false == 0 # true false == undefined # false false == null # false null == undefined # true '\t\r\...Function 构造器是eval的另一种形式,同样也应该避免使用它。 浏览器提供的setTimeout和setInterval函数,他们能够接受字符串参数或函数参数。...单行语句的形式是另一种带刺的玫瑰。它带来的好处是可以节省两个字节,但这是不是一个好处值得商榷。它模糊了程序的结构,使得在随后的操作代码中可能容易插入错误。...一个语句不能以一个函数表达式开头,因为官方的语法假定以单词function开头的语句是一个function语句。解决的方法就是把函数调用括在一个圆括号中。...而在JavaScript中,void是一个运算符,它接受一个运算数并且返回undefined。
领取专属 10元无门槛券
手把手带您无忧上云