外部JavaScript文件使用的JavaScript内联变量? (可变范围问题)

时间:2012-05-22 10:24:15

标签: javascript jquery

我有以下代码:

<script type="text/javascript">
    var ops = {
        slideshow: {
            slices: 20,
            boxCols: 11,
            boxRows: 6,
            animSpeed: 750,
            pauseTime: 6000
        },
        tweets: {
            username: 'stigmahost',
            count: 6,
            refresh_interval: 120,
            auto_join_text_default: 'I said,',
            auto_join_text_ed: "I",
            auto_join_text_ing: "I am",
            auto_join_text_reply: "I replied to",
            auto_join_text_url: "I was looking at",
            just_now: 'Now',
            X_seconds_ago: '{x} seconds ago',
            about_a_minute_ago: 'About a minute ago',
            about_X_minutes_ago: 'About {x} minutes ago',
            about_an_hour_ago: 'About an hour ago',
            about_X_hours_ago: 'About {x} hours ago',
            about_a_day_ago: 'About a day ago',
            about_X_days_ago: 'About {x} ημέρες ago'
        },
        map:
        {
            latitude: 37.966667,
            longitude: 23.716667,
            zoom: 8
        }
    }
</script>
在该代码之后

立即我有该代码:

<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?key=MyKey&sensor=true"> </script>
<script type="text/javascript" src="js/js.js"></script>
<script type="text/javascript" src="js/jquery.tweet.js"></script>

然后在 js.js 文件中,我尝试使用 ops 变量,但没有任何运气。您是否知道为什么我不能将变量 ops 用于 js.js

进入js文件我使用该代码来确定ops变量的类型:

console.dir(ops);

在我的控制台中,我得到了未定义的结果。

我做错了吗?


我做了一些进步。 js.js文件是这样的:

jQuery(document).ready(
    function()
    {
        console.dir(typeof ops);
        ...
        File code here
        ...
    }
);

上面的代码在我的控制台中返回“undefined”

现在我试试了:

console.dir(typeof ops);

jQuery(document).ready(
    function()
    {
        console.dir(typeof ops);
        ...
        File code here
        ...
    }
);

并在我的控制台中返回,第一次尝试返回“Object”,第二次尝试返回“undefined”。

有帮助吗?

1 个答案:

答案 0 :(得分:2)

$.getScript("js.js", function() {
    //declare ops-variable in here and use it
});

没有jquery:

var Loader = function () {

}
Loader.prototype = {
require: function (scripts, callback) {
    this.loadCount      = 0;
    this.totalRequired  = scripts.length;
    this.callback       = callback;

    for (var i = 0; i < scripts.length; i++) {
        this.writeScript(scripts[i]);
    }
},
loaded: function (evt) {
    this.loadCount++;

    if (this.loadCount == this.totalRequired && typeof this.callback == 'function') this.callback.call();
},
writeScript: function (src) {
    var self = this;
    var s = document.createElement('script');
    s.type = "text/javascript";
    s.async = true;
    s.src = src;
    s.addEventListener('load', function (e) { self.loaded(e); }, false);
    var head = document.getElementsByTagName('head')[0];
    head.appendChild(s);
}
}

 var l = new Loader();
l.require([
"js.js"
function() {
    // do same stuff in this callback
});