2015-12-22 29 views
0

当ejs文件编译时,它变成了一个javascript函数。例如,该EJS文件编译后的jst模板中的“this”是什么

<h3> Users Index</h3> 
<ul> 
    <% users.each(function (user) { %> 
    <li><%= user.get("name") %></li> 
    <% })%> 
</ul> 

编译这个javascript函数:

(function() { this.JST || (this.JST = {}); this.JST["users/index"] =  function(obj){var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('<h3> Users Index</h3>\n\n<ul>\n '); users.each(function (user) { ; __p.push('\n <li>', user.get("name") ,'</li>\n '); }); __p.push('\n</ul>\n\n');}return __p.join('');}; 
}).call(this); 

在JavaScript功能上面,什么是this指什么? (即骨干视图等)

回答

2

如果你运行一个自执行的函数构建这样

(function() { console.log(this) }).call(this); 

你会发现它会输出(Chrome的控制台输出)

Window {external: Object, chrome: Object, document: document, i: undefined, StackExchange: Object…} 

因此,所有这一切只是将变量JST添加到全局(window)命名空间,以便它可以在每个后续脚本中访问。

线this.JST || (this.JST = {});将确保,如果window.JSTwindow = this正如我们看到的)存在,如果不是被创建,它的价值将是一个空对象(this.JST = {})。

+0

啊,这很有道理。谢谢! – User314159

相关问题