实际情况是这样这个lechart.js里面定义了三个变量D3,D1,D0,现在我在另一个html页面引入这个js,然后在该页面下调用lechart.js里面定义过的变量D3,D1,D0,,但是因为作用域的问题肯定就拿不到了会报错,请问怎么解决这个问题呢???怎么才能拿到这个变量?
补充:我现在修改js里面吧var去掉让局部变量变为全局变量 可这样还是not defined,求解???
这样吧数据传入到方法里面是可以正常运行的,拿出来就不行了,我也知道是D3没有找到,但是该怎么来写呢??求各位大神指点
跨页面前端用cookie或者html5里的local Storage
你都知道是作用域的问题了,当然用作用域来解决。。。。你的D3之类的变量设置成全局变量的属性
这里的basicDataChart,你调这方法之前D3是不存在的
你好歹代码帖全点呀
1.html文件里,你是先用了D3 D1 D0 再调的方法,但是这三个变量的赋值是写在方法里面的,还没有调用方法,也就还没有执行D3 = ..... 的语句,也就是没有定义全局变量,自然会是not defined,js是顺序执行的。举个例子。
function msg(val) {
a = "111";//全局变量
console.log('这是个方法:' + val);
}
msg("3333");//先调用方法
console.log(a);//再使用全局变量
function msg(val) {
var a = "111";//局部变量
console.log('这是个方法:' + val);
}
msg("3333");//调用方法
console.log(a);//使用局部变量
function msg(val) {
a = "111";//在方法里赋值全局变量
console.log('这是个方法:' + val);
}
console.log(a);//先使用全局变量
msg("3333");//再调用方法
对比一下这三段代码的区别。
2.把给value1 value2的赋值写在js方法里面,调用函数的时候自然就给它赋值了。
可以多看看js变量作用域的问题。js变量以及其作用域详解
我自己试验所得,不知道解释的是不是正确。欢迎大神指摘。
这个不是应该用闭包或是创建一个新的对象么?
D3 D1 D0 算是basicDataChart
的配置,使用闭包或是对象都可以呀!
简单写个闭包的吧
(function (){
var D3,D1,D0;
function basicDataChart(){
// TO DO
}
basicDataChart.getD=fucntion(){
return [D3,D1,D0]; // 自己改成想要的结构
}
window.basicDataChart=basicDataChart;
})();