请参阅下面的代码段:
var mySwiper = new $('.swiper-container').swiper({
pagination: '.pagination',
loop:true,
grabCursor: true,
paginationClickable: true
});
function moveslide(n) {
alert(mySwiper)
}
在警报中,它显示" undefined"我不知道为什么? mySwiper
是全局的,它在同一个块中不起作用!
请指导。
答案 0 :(得分:2)
在评论中,你已经说过了
删除new
没有任何区别,
您是通过点击按钮
moveslide
这告诉我们这是三件事之一:
您在执行moveslide
行之前正在调用var mySwiper = ...
。因为var
声明在上下文中的任何分步代码之前发生[它们被“悬挂”]),所以变量存在,但因为该行上的赋值保留在它的位置是的,可以在moveslide
为其分配值之前致电mySwiper
。
分配mySwiper
值的代码可能永远不会被调用。我会在它上面设一个断点,看它是否确实存在;也许错误(异常或逻辑错误)会阻止在逐步执行中访问代码。这不会影响moveslide
(函数声明像var
一样被提升),但会影响您分配给变量的代码。
(只有 {}> new
var mySwiper = new ...
.swiper()
undefined
new
才能返回new
。对于jQuery插件来说,这将是一个非常奇怪的事情,如果你在new
时遇到问题,那么这不是它,但我只是将它包括在内完整性。
旁注:new
为什么不能发生这种情况?因为使用this
,表达式的结果将始终是非空对象引用,而不是原语:null
创建一个对象,然后调用您为该对象提供的函数{{{1} 1}}。如果函数没有返回任何内容,返回undefined
或返回任何原始值(包括new
),new
表达式的结果是对{{{{}创建的对象的引用1}};如果函数返回非空对象引用,则结果是该对象引用。因此,您永远无法从undefined
返回new
。
旁注:从您的问题来看,您似乎认为这是一个范围问题,并且为什么mySwiper
不在范围内感到困惑。这不符合症状。如果您在undefined
中看到alert
,则mySwiper
在范围内;如果它不在范围内,则会得到ReferenceError
(因为尝试读取不存在的变量的值是错误的)。我只是提到这一点,如果你以后遇到类似的东西,你知道它不是范围,而是时间。
答案 1 :(得分:-1)
在页面顶部,document.ready
函数内部声明如下:
var mySwiper; //making it global
并更改代码,如下所示(仅删除var
):
mySwiper = new $('.swiper-container').swiper({
pagination: '.pagination',
loop: true,
grabCursor: true,
paginationClickable: true
});
function moveslide(n) {
alert(mySwiper)
}