我有两个函数一和二,其中函数一调用第二个函数,但它不起作用,
例如:
function one() {
var a = 1;
var position = {
global: function(b) {
console.log(b);
}
}
}
function two(){
$(window).on('swipedown', function() {
one();
position.global(a);
});
}
two();
demo`
答案 0 :(得分:1)
您需要在函数外部声明a和position对象以避免闭包。
var a = null, position = {};
function one() {
a = 1;
position = {
global: function(b) {
console.log(b);
}
}
}
function two(){
$(window).on('swipedown', function() {
one();
position.global(a);
});
}
two();
答案 1 :(得分:0)
这里的问题是变量a
和position
的范围,因为你已经在函数one
中声明了它们,它只存在于函数内部,一旦函数退出变量不再可用。
由于您正在访问函数two
中的变量,因此需要在共享范围内声明它们,例如
var position, a;
function one() {
a = 1;
position = {
global: function(b) {
snippet.log('b:' + b);
}
}
}
function two() {
$(window).on('scroll', function() {
one();
position.global(a);
});
}
two();
body {
height: 3000px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
使用变量a
的另一种方法是使用像
var position;
function one() {
var a = 1;
position = {
global: function() {
snippet.log('a:' + a);
}
}
}
function two() {
$(window).on('scroll', function() {
one();
position.global();
});
}
two();
body {
height: 3000px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>