我有一个内联js对象,我试图在外部js文件中访问,如下所示:
内联js:
Microsoft.Win32.RegistryKey key;
key = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Names");
key.SetValue("Name", "Isabella");
key.Close();
外部js:
<script type="text/javascript">
$(function(){
var person = {firstName:"John", lastName:"Doe", age:46};
});
</script>
当我运行此代码时,我得到一个js错误,说没有定义person。外部文件在内联js后调用。内联js位于页面顶部,外部js链接在页面底部,如下所示:
$(function() {
var name = person.firstName;
});
有人可以为此添加一些见解吗?
答案 0 :(得分:0)
这是一个简单的范围问题。您已在该功能的内声明person
。在该功能之外,您无法访问person
。请在此处查看示例:https://jsfiddle.net/7ksaethr/1/
要解决此问题,请在函数外部声明person
,然后将其设置为:
var person = null;
$(function(){
person = {firstName:"John", lastName:"Doe", age:46};
});
$(function() {
var name = person.firstName;
});
答案 1 :(得分:0)
您需要查看scope
概念以及javascript如何实现它。
person
变量在作为参数传递的anonymous callback
内声明到$()
函数中,因此,只有该范围及其子范围可以访问该变量。
variable
私有,您需要将其公开到其父作用域:window.person
而不是var person
。variable
,因此您需要等待jQuery
在尝试访问person
之前触发它。
$(function() {
window.person = { name: 'Giuseppe' };
});
// this should log undefined
console.log('person is not defined yet', window.person);
$(function() {
console.log('person', window.person);
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
答案 2 :(得分:0)
所以我想出了如何做到这一点。首先,我添加了一个空数组,如下所示:
<script>
window.names= [];
</script>
然后在jsp中的每个循环中,我就像这样填充空数组(此方法用于从控制器返回的动态列表):
<script>
window.names.push({
names: '${name.allNames}'
});
</script>
如果您的列表不是动态的,您可以执行以下操作:
<script>
window.names.push({
names: '${ken, james, jen, emily}'
});
</script>
然后在您的外部js中,您可以像这样访问列表:
(function( detail, $, undefined, index) {
'use strict';
var names= detail[0].allNames;
})(names, jQuery);