访问外部js文件中的内联js对象

时间:2016-12-09 17:53:47

标签: javascript jquery html

我有一个内联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;
});

有人可以为此添加一些见解吗?

3 个答案:

答案 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;
});

示例:https://jsfiddle.net/7ksaethr/2/

答案 1 :(得分:0)

您需要查看scope概念以及javascript如何实现它。

顺便说一下, 在您的情况下,person变量在作为参数传递的anonymous callback内声明到$()函数中,因此,只有该范围及其子范围可以访问该变量。

  1. 因为variable 私有,您需要将其公开到其父作用域:window.person而不是var person
  2. 由于在回调中声明了variable,因此您需要等待jQuery在尝试访问person之前触发它。
  3. &#13;
    &#13;
    $(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;
    &#13;
    &#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);