我使用购物车API构建电子商务网站。创建者创建了一个sdk然后你必须为其他一些函数制作你自己的.js文件。
调试时我会在我的.js文件中的任何地方插入一个console.log()
,这样我就可以调试对象选项等等。
但是我希望能够将sdk用作实时工具,因此我不必使用新的$(function() { EVERYTHING });
行编辑我的.js文件,而是只能输入对象.color_code并让控制台输出该字符串作为对象颜色代码。目前虽然它只是给了我未捕获的引用错误,但是没有定义对象。
我认为这是因为我的自定义.js文件在console.log
SO中包含了所有的脚本,当我尝试从控制台调用任何东西时,它说它未定义,但如果我只是在一切中使用int[] numbers = {20, 30, 40, 50, 60, 70};
int rotateBy = 3;
int[] rotated = new int[numbers.Length];
Array.Copy(numbers, rotateBy, rotated, 0, numbers.Length-rotateBy);
Array.Copy(numbers, 0, rotated, numbers.Length - rotateBy, rotateBy);
它会起作用。那么有什么方法可以解决这个问题吗?
随意解释为什么它不起作用,但我想要一种方法来实现这一点,不要告诉我没有方法,即使我必须加上前缀我希望每次来自.js文件,我都不介意
答案 0 :(得分:2)
你是正确的,因为函数内的所有变量都只在本地定义,因此无法通过控制台访问。但是,在Javascript中,至少有两个选项可以从内部函数设置全局变量;如果您使用这些来声明要从函数外部访问的变量,它将起作用:
为未声明的变量指定值:varname=value;
将变量分配给window
对象:window.varname=value;
或window['varname']=value;
答案 1 :(得分:1)
可能的解决方法是在全局范围中公开要调试的对象:
(function() {
var privateStuff = { foo: 'bar' };
// make privateStuff public for debugging purposes
window['debugObject'] = privateStuff;
})();
document.write(debugObject.foo);

如果要公开具有可能与现有名称冲突的相当常见名称的多个对象,请确保使用不常见的名称而不是直接在对象中公开它们:
(function() {
var x = { str: 'this is' },
y = { str: 'a test' };
window['debugObject'] = {
x: x,
y: y
};
})();
document.write(debugObject.x.str + ' ' + debugObject.y.str);

答案 2 :(得分:1)
如果您乐意更改源文件,那么您可以将 EVERYTHING 中要访问的内容导出为全局。
$(function() {
//EVERYTHING
...
window.Ireply = window.Ireply || {};
window.Ireply.object = object;
...
});
console.log(Ireply.object); // some object
答案 3 :(得分:0)
您可以更改
之类的声明$(function(){
var cart = {};
})
要
var cart;
$(function(){
cart = {}
})
或者
$(function(){
var cart = {};
window.cart = cart;
})
但是你要避免污染全局命名空间。您还需要注意在回调或循环中使用全局变量,在这些变量或循环中您可能会遇到意外行为,因为局部变量范围通常很重要,以保持本地