从头部定义的警报变量
我有这个简单的HTML页面,它使用Facebook Javascript SDK:
alert(publish); window.fbAsyncInit = function() { FB.init({ appId : 'xxxxxxxxxxx', xfbml : true, version : 'v2.1' }); FB.getLoginStatus(function(response) { }); FB.api( "/me/permissions", function (response) { if(response && !response.error) { publish = '1'; } else { publish = '0'; } } ); }; (function(d, s, id){ var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) {return;} js = d.createElement(s); js.id = id; js.src = "//connect.facebook.net/en_US/sdk.js"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk'));
我想使用在FB.api
函数中定义的名为publish
的变量。 我想从该部分使用它,但因为它稍后定义,它会记录一个未定义的变量错误。 有没有解决的办法?
这里有两个问题,一个声明问题和一个时间问题。
从alert
行开始,没有创建名为publish
变量。 如果您尝试读取未声明符号的值,则会导致ReferenceError
。 (如果你试图写一个未声明的符号,在松散模式下你会得到隐含全局的恐怖 ,在严格模式下你得到一些理性的东西:一个ReferenceError
。)
但是分开而且更重要的是,时间问题:当你试图提醒它时,不仅是publish
未声明的,而且即使它被声明它也没有任何有用的值,因为你没有设置值然而。
警告publish
值的正确位置将在api
回调中获取值:
FB.api( "/me/permissions", function (response) { var publish; // <== declare it if(response && !response.error) { publish = '1'; } else { publish = '0'; } alert(publish); // <== use it } );
如果需要在api
回调之外使用publish
,则可以将声明移到回调之外。 但是,在发生回调之前,您无法使用 publish
(有意义)。 例如:
var publish; // <======= Declaration window.fbAsyncInit = function() { FB.init({ appId : 'xxxxxxxxxxx', xfbml : true, version : 'v2.1' }); FB.getLoginStatus(function(response) { }); FB.api( "/me/permissions", function (response) { if(response && !response.error) { publish = '1'; // <=== fill it in } else { publish = '0'; // <=== } } ); }; function doSomethingWithItLater() { // <=== A function that uses it if (publish) { // Do this } else { // Do that } } (function(d, s, id){ var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) {return;} js = d.createElement(s); js.id = id; js.src = "//connect.facebook.net/en_US/sdk.js"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk'));
重要的是,在调用api
回调并且设置了publish
的值之前,不要调用doSomethingWithItLater
。 确保这一点的最好方法是从回调中调用它。
您需要在函数启动之前定义变量。 然后该函数将更新变量。