2019独角兽企业重金招聘Python工程师标准>>>

本文只是一些很零散的东西,关于js的模板引擎方面的知识。

看 Node in Action的时候,有一章关于ejs,看到这样的一个片段:

<% if (locals.messages) { %>
后面省略若干行

这个 locals 让我迷惑不解,因为根据资料,express只是暴露了一个settings到app.locals,并没有暴露这个locals。 后来看了ejs的部分源码,才知道这个locals存在的原因,其实ejs工作机制的缘故。 现在开始说一下背景知识。

new Function的魔法

在js里,可以创建一个匿名函数,然后赋值给一个变量:

var fn = function(x, y) { return x + y; };

但是,除了这种方法,还有一种更灵活的方法来创建前面的函数:

var fn = new Function("x, y", "return x + y;");

这是很多魔法的来源,它实际上代表了一种思想:用代码创造代码

with关键字

js里有一个with关键字, 先看个例子:

var t = { name : { firstname: "tom" }, age: 12 }
with (t.name) {console.log(firstname); // 输出 tomfirstname = "jack"
}console.log(t.name.firstname) // 输出 jack

没啥问题。但是,再看这个:

var t = { name : { firstname: "tom" }, age: 12 }
with (t.name) {firstname = "jack"console.log(firstname); // 输出 jackconsole.log(t.name.firstname); //输出 jackt.name = {firstname: "mike"};console.log(firstname); // 输出 jackconsole.log(t.name.firstname); //输出 mike
}console.log(t.name.firstname) // 输出 mike

with里面发生了什么事情呢?其实很简单,可以这样理解上面的代码:

var t = { name : { firstname: "tom" }, age: 12 };(function(scope) {   scope.firstname = "jack"console.log(scope.firstname);  // 输出 jackconsole.log(t.name.firstname); // 输出 jack , 因为现在scope 和 t.name 是 同一个对象t.name = {firstname: "mike"};console.log(scope.firstname); // 输出 jack,因为 scope 和 现在的t.name 是两个独立无关的对象了!console.log(t.name.firstname); //输出 mike
})(t.name); // 把 t.name 传进去console.log(t.name.firstname) // 输出 mike

所谓指向对象的变量,其实就是指针而已。

未完

转载于:https://my.oschina.net/mustang/blog/265062

关于expres模板引擎,Function,with相关推荐

  1. php开发自己的模板引擎,如何用PHP来编写自己的模板引擎 - PHP|模板引擎 - 软件工程|架构设计|网站设计|艺术营销 - 河洛炎黄 - 魏文侯...

    本文的目的不是为了让大家学会如何编写一个完善的模板引擎,只是为了给PHP初学入门者解释模板引擎的原理和作用. PHP模板引擎的作用是为了让表现层逻辑和页面本身分开,让程序员和美工的工作可以相对独立,并 ...

  2. php codeigniter 语言,php – codeigniter模板引擎,包括语言解析器

    不幸的是,CI内置的模板解析器类没有此功能.你可以在 sparks directory中环顾四周,有多个火花集成了许多模板引擎,如smarty或twig,可以通过调整来创建这样的东西. 此外,您可以尝 ...

  3. php smarty模板引擎 性能,smarty性能低?直接使用php模板引擎吧

    skymvc框架使用的php模板引擎 1.[代码][PHP]代码 class smarty{ public $template_dir = '';//模版文件夹 public $cache_dir = ...

  4. 【JavsScript】推荐五款流行的JavaScript模板引擎

    摘要:Javascript模板引擎作为数据与界面分离工作中最重要一环,受到开发者广泛关注.本文通过开发实例解析五款流行模板引擎:Mustache.Underscore Templates.Embedd ...

  5. php 简单模板引擎,PHP 实现简单的模板引擎

    模板引擎作为视图层和模型曾分离的一种解决方案. 首先我们新建一个Template.class.php 的文件 '.m', //设置模板文件'templateDir' => 'template/' ...

  6. php模板引擎如何实现,php模板引擎技术简单实现

    用了smarty,tp过后,也想了解了解其模板技术是怎么实现,于是写一个简单的模板类,大致就是读取模板文件->替换模板文件的内容->保存或者静态化 tpl.class.php主要解析 as ...

  7. 使用模板引擎Trimpath

    使用模板引擎,让开发模式更清晰,也让职责更明确,对维护对开发都是一件双赢的事情. 曾经接触过SmartTemplate和Velocity,如果纯从编写前端模板来说,都不是太难的事情,大部分流行的模板引 ...

  8. 浅谈Web中前后端模板引擎的使用

    前言 这篇文章本来不打算写的,实话说楼主对前端模板的认识还处在非常初级的阶段,但是为了整个 源码解读系列 的完整性,在深入 Underscore _.template 方法源码后,觉得还是有必要记下此 ...

  9. smarty模板引擎原理解析

    //php 控制器文件 <?php //引入模板引擎文件 include("20130304.php"); $smarty = new TinySmarty(); $qq_n ...

最新文章

  1. 人脸识别门禁_门禁人脸识别系统铜陵县门禁人脸识别系统哪家好
  2. IBM对话智能+未来:十年提升AI性能效率千倍?
  3. The Ice::Current Object
  4. asp.net三层结构
  5. 架构设计:分布式服务,库表拆分模式详解
  6. Atitit.mybatis的测试  以及spring与mybatis在本项目中的集成配置说明
  7. Keras过拟合相关解决办法
  8. 教你如何在机器学习竞赛中更胜一筹(上)
  9. vasp服务器中断,vasp优化结构没提示直接中断
  10. 一种应用于GPS反欺骗的基于MLE的RAIM改进方法
  11. 在linux上将ape转成mp3,以及MP3 大小转换
  12. L2TP设置-如果更改了公网IP,需要更改哪些东西?
  13. 设置TreeViewer的前景色和背景色
  14. 2019杭电多校 Snowy Smile hdu6638 (线段树最大子段和)
  15. 3DMAX和MAYA的区别
  16. png图片格式转换器_如何将图像转换为PNG格式
  17. Cesium Primitives加载大量图标点
  18. 熟练的运用计算机英语怎么说,熟练用英语怎么说
  19. 网安零基础学习-python-正则表达式(灰帽编程17)
  20. 如何除去暴风影音的左上边广告和下角动态广告

热门文章

  1. linux c语言链表的简单应用之创建链表
  2. python 中的queue, deque
  3. 汉王人脸1000万用户后的第一人诞生
  4. 什么是MyCat?为什么要用到MyCat呢?
  5. zabbix-2:自定义监控项目
  6. Sleep()和wait()方法的区别
  7. 如何在Windows 10中创建电源选项快捷图标,快速设置笔记本电脑的节能模式
  8. 和我一起学《HTTP权威指南》——安全HTTP与HTTPS
  9. 【转】HashMap和HashSet的区别
  10. Java知多少(15)字符串