我在javasciptpack里有一个 首页.js 文件
var hello = "hello"
window.hello2 = "hello"
但是,在加载相关的视图(home.html.erb)后,在我的导航器的javascript控制台中,这些变量我得到了 Uncaught ReferenceError: hello is not defined
或 undefined
var hello = "Hello"
- 当你输入 > hello
在控制台中,这将无法工作,因为在Javascript中,有一个叫做Closure的概念。我发现 本文 有用的。
window.hello2 = "Hello"
-> 你正在分配一个全局变量。当你输入 > window.hello2
在控制台中,它将给出输出,但只是 > hello2
不会工作,它给 ReferenceError
.
window.hello2
是可以用于你所有的JS代码的,它是全局的。另外,你没有提到你是如何使用你的 pack/home.js
文件。
如果你包含 <%= javascript_pack_tag 'home' %>
在 app/views/layouts/application.html.erb
然后,你的JS代码将在每个controllerview中运行(不仅仅是在 Home
控制器)。)
如果你包括 <%= javascript_pack_tag 'home' %>
在 app/views/home/index.html.erb
,那么你的JS代码将只运行在 home#index
动作--但它会触发刷新。