JavaScript / EJS范围混淆

JavaScript / EJS scope confusion

本文关键字:范围 EJS JavaScript      更新时间:2023-09-26

有一个关于JavaScript作用域的问题日志,但没有一个解决我的确切问题。

我如何访问我的脚本中的user对象,为什么它不可见?
我的应用程序呈现一个. js页面。考虑下面的代码:

<html>
<body>
     ...some stuff
     <% if (user.local.email) { %>      <!-- WORKS PERFECTLY -->
     ... some stuff
     <% } %>
     <script>
         $(document).ready(function() {
         console.log(user);            //-- DOES NOT WORK
         }                             //-- REFERENCE ERROR: USER NOT DEFINED
     </script>
</body>
</html>

我不明白为什么user在页面的一部分可见,而不是在它下面的脚本?

这里很好地解释了答案

实际上,从这个答案中,您捕获了值:

<script type='text/javascript'>
   var rows =<%-JSON.stringify(data)%>
</script>

EJS用于服务器端脚本编写JavaScript 用于客户端脚本编写。所以一个变量在另一个中是不可用的。EJS在服务器上执行,所有声明的变量在执行后都消失了。然后将页面返回给浏览器,浏览器随后执行Javascript,因此Javascript中不可用EJS变量。

但是,如果你想这样做,你可以这样做:

console.log(<%= user %>);

希望这能回答你的问题。