2015-10-06 56 views
1

我有两个功能,一个和两个,其中第二个函数功能一个电话,但它不工作,函数调用到其他功能与JS对象

例如:

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`

jsfiddle

+4

你需要在共享范围 –

+1

https://jsfiddle.net/arunpjohny/ca9sz05w/1/ –

+0

由于同时声明'了'和'position'工程:) –

回答

0

这里的问题是变量aposition的范围,因为你已经声明它们在函数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>

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(); 
相关问题