2017-06-20 45 views
0

我想對所有3個函數(newQuote,postFB和tweet)使用相同的var randomQuote,但似乎不起作用。JS - var undefined

如果我把它放在newQuote函數中,只有這個函數可以工作,如果只有外部 - 只有共享函數可以工作,newQuote只會在點擊(?)時改變一次引用。

我可以使所有3個函數工作的唯一方法是如果我重複它 - 一個內部和一個外部的newQuote函數 - 是否有任何方式使它「幹 - 呃」?

var randomQuote = Math.floor(Math.random() * (quotes.length)); //outside 
document.getElementById("refresh").onclick = newQuote; 
function newQuote() { 
var randomQuote = Math.floor(Math.random() * (quotes.length)); //inside 


document.getElementById("facebook").onclick = postFB; 
function postFB() { 
var url = "http://www.facebook.com/sharer/sharer.php?u=" + encodeURIComponent(quotes[randomQuote]); 
    window.open(url); 
} 
  • 沒有包括在這裏嘰嘰喳喳的功能 - 相同的思路FB

任何建議,我什麼(初學者)做錯了什麼?先謝謝你!

+0

你的newQuote函數調用應該有刷新onclick事件的圓括號。另外,你的newQuote函數需要一個大括號。至於在newQuote內部聲明它之後訪問randomQuote ...只需將randomQuote作爲參數傳遞給newQuote,並在函數內部執行需要的操作。 – SidTheBeard

+0

謝謝你的回覆!帶括號的新引用?hmm - js book:「與內聯事件處理不同的是,」=「後面的函數名稱不在引號中/函數名稱後面沒有括號」/我仍然嘗試了這種方式 - 沒有用/ /缺少捲曲括號 - 只是沒有複製在這裏/鉻控制檯是非常有用的發現這樣的錯誤。不知道如果我理解「傳球和做什麼,我有功能做的」 - 試圖通過爲參數 - 搞砸了我的圖片/唯一的方式,它的工作原理,如果我重複自己與這一行代碼:( 代碼鏈接https://codepen.io/AsiaKo/pen/ybgxQY – AsiaKo

回答

0

使用let而不是var來聲明您的變量可能會解決您的問題。這兩者之間的區別詳細描述在here;相關的想法(從鏈接後服用)是

變種可以被限制在最近的功能塊,並讓可以被限制在最近的封閉塊(均爲全局如果以外的任何塊),它可以是小於一個功能塊。

+0

謝謝你的回覆!我曾嘗試讓之前 - 沒有工作/相同與var只共享功能似乎工作/這裏是整個代碼:https:// codepen.io/AsiaKo/pen/ybgxQY – AsiaKo