2015-10-06 59 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(); 
相關問題