2016-12-09 69 views
0

我有我试图访问一个外部JS文件,像这样的内联JS对象:访问内嵌的js在外部JS对象文件

内联JS:

 <script type="text/javascript"> 
      $(function(){ 
       var person = {firstName:"John", lastName:"Doe", age:46}; 
      }); 
    </script> 

外部JS:

$(function() { 
    var name = person.firstName; 
}); 

当我运行这段代码,我得到一个js错误,说人不defined.The外部文件我在内联js之后调用。内联JS是在页面的顶部和外部JS链接页面像这样的底部:

<script src = "js/example.js"></script> 

任何人都可以加入一些洞察到这一点?

回答

0

所以我想通了,如何做到这一点。在

<script> 
    window.names= []; 
</script> 

然后,对于在jsp每个环路I填充空数组像这样(此方法是针对从控制器回来的动态列表):首先在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); 
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/

+0

https://jsfiddle.net/z_acharki/7ksaethr/3/ –

+0

我不确定你为什么低估了我。我的回答没有错,您刚刚提供了不提供隐式作用域的替代解决方案。如果你喜欢这样做,然后提供你自己的答案。 – Santi

+0

谢谢,但在js脚本的第一部分中,人员是在dom中声明的。我不是那个低估你的人...... – vslat

0

你需要有看看scope概念以及javascript如何实现它。

顺便说一句, 你的情况person变量声明的anonymous callback作为参数传递到$()函数内部,因此,只有规模和他们的孩子,范围可以访问到该变量。

  1. 因为variable私人,则需要将其暴露在它的父范围:window.person代替var person
  2. 由于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); 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>