Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript作用域问题-变量未定义_Javascript_Jquery_Scope - Fatal编程技术网

Javascript作用域问题-变量未定义

Javascript作用域问题-变量未定义,javascript,jquery,scope,Javascript,Jquery,Scope,我对此有点困惑,因为我确信在运行时之前,所有变量都被带到javascript的“顶部”,然后从那里进行处理 所以我的错误 TypeError: hutber.portfolio.ko is undefined [Break On This Error] items: ko.observableArray(hutber.portfolio.ko.data), 对象 (function ($) { "use strict"; //For good development standard

我对此有点困惑,因为我确信在运行时之前,所有变量都被带到javascript的“顶部”,然后从那里进行处理

所以我的错误

 TypeError: hutber.portfolio.ko is undefined
 [Break On This Error]  
 items: ko.observableArray(hutber.portfolio.ko.data),
对象

(function ($) {
"use strict"; //For good development standards :)
hutber.portfolio = {
    init: function(){
        e(typeof(hutber));
        hutber.portfolio.changeOptionsBoxHeight();
        //Bind the height resize in window resize
        $(window).resize(function(){
            hutber.portfolio.changeOptionsBoxHeight();
        });
        //start KO
        hutber.portfolio.ko.init();
    },
    changeOptionsBoxHeight: function(){
        var height = $(window).height();
        $('.portfolio--options').height(height-400);
    }
};
hutber.portfolio.ko = {
    init: function(){
        ko.applyBindings(new hutber.portfolio.ko.portfolioViewModel());
    },
    data: [],
    items: ko.observableArray(hutber.portfolio.ko.data),
    portfolioViewModel: function(){

        hutber.portfolio.ko.items = ko.observableArray(hutber.portfolio.ko.data);

        $.getJSON('/js/pages/portfolio.json').done(function(info){
            hutber.portfolio.ko.data = info;
            hutber.portfolio.ko.items (hutber.portfolio.ko.data);
        });
    }
};
hutber.portfolio.init();
})(jQuery);

我真的很想上传到小提琴,但出于某种原因,我在他们的网站上得到了js错误。我相信我的防火墙阻止了某些文件的加载

猜猜看:因为您在声明变量之前访问了它?

ko.observearray(hutber.portfolio.ko.data)
运行时,
hutber.portfolio.ko
尚未定义

你可以这样处理它:

hutber.portfolio.ko = {
    init: function(){
        ko.applyBindings(new hutber.portfolio.ko.portfolioViewModel());
    },
    data: [],
    portfolioViewModel: function(){

        hutber.portfolio.ko.items = ko.observableArray(hutber.portfolio.ko.data);

        $.getJSON('/js/pages/portfolio.json').done(function(info){
            hutber.portfolio.ko.data = info;
            hutber.portfolio.ko.items (hutber.portfolio.ko.data);
        });
    }
};

hutber.portfolio.ko.items = ko.observableArray(hutber.portfolio.ko.data);

但此时,
hutber.portfolio.ko.data
总是
[]
。因此,您不妨将
ko.observableArray([])
放在原始代码中。

我肯定已经声明过了:/我得到了一个没有定义的赫特伯。你可以用这个代替jsfiddle@PabloGonzálezAlba:hutber还没有定义。但这不是问题。为此欢呼:)加上hutber={};上面(函数($){为了声明它确实修复了错误,会弹出另一个。但现在这才是真正的重点:)我没有想过像那样动态地添加到对象中。不确定为什么我如此死心塌地地地确保它是在对象链中定义的。还有
hutber.portfolio.ko.items(hutber.portfolio.ko.data)
只要
ko.observatarray()
不返回函数,这一行可能会抛出错误。但我对Knockout不太了解。耶,我还认为它必须是一个函数。足够多的搜索结果表明它不需要是一个函数。只是一个对象、数组等