xとyの2つのセットを比較できるように、何かのx、yを与える2つの関数を作成したいと思います。以下はその機能の1つです。 2つ目は同じことをするでしょう。関数外のvarにはどのようにアクセスすればよいですか?
私はconsole.log position.gxとposition.gyを関数の中に入れることができますが、関数の外でそれをアクセスするにはどうすればposition.gxとposition.hxを比較するかのようにすることができますか?
私はそれが範囲の問題だと知っていますが、私はこれを書き直す方法を理解することができないので、私はposition.gxと別の機能のものを比較できます。
(独学であることに問題が私は愚かなものにハングアップを取得される。)
function guyLocation() {
var myElement = document.querySelector("#guy");
var xPosition = 0;
var yPosition = 0;
function getPosition(el) {
this.addEventListener("load", true);
while (el) {
if (el.tagName == "BODY") {
var xScrollPos = el.scrollLeft || document.documentElement.scrollLeft;
var yScrollPos = el.scrollTop || document.documentElement.scrollTop;
xPosition += (el.offsetLeft - xScrollPos + el.clientLeft);
yPosition += (el.offsetTop - yScrollPos + el.clientTop);
} else {
xPosition += (el.offsetLeft - el.scrollLeft + el.clientLeft);
yPosition += (el.offsetTop - el.scrollTop + el.clientTop);
}
el = el.offsetParent;
}
return {
gx: xPosition,
gy: yPosition
};
};
document.body.onkeydown = function() {
position = getPosition(myElement);
console.log(position.gx + ", " + position.gy);
};
};
短い答え - 彼らは「グローバル」を作るために、任意の関数の外で変数を宣言します。この変数は関数内でも利用可能でもあります。 –
あなたの問題を既に解決したようです。コード内の 'position'は[暗黙的なグローバル]です(http://blog.niftysnippets。org/2008/03/horror-of-implicit-globals.html)(悪い習慣)、どこにでもアクセスできます。あなたはグローバルスコープで 'position'を宣言することができます。 – Teemu
[Closures](https://developer.mozilla.org/en/docs/Web/JavaScript/Closures)を見てください。これはあなたが探しているものです。 – DavidDomain