10
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

JavaScript 入門メモ [変数参照編]

Last updated at Posted at 2015-01-14

#はじめに
最近始めた[JavaScript]がよく理解が出来ていないので、これを機会に書いてみようか、と思いまして書く事にしました。
本やサイトで学んだ事を気ままにここに記そうと思います。
ちなみに好きな言語は[C/C++]です。(好きなだけでバリバリはできません・・・。)

#変数の宣言

example01.js
var a = 5;
console.log(a);
// 5
var a;
console.log(a);
// 5

宣言しただけで何も代入をしないと[undefine値]になる。
また、同じ変数をもう1度宣言しても値がクリアされないみたい。
そんな時、こういう形にすればいい!
var a = a || 5
イディオムの一種で、変数[a]が既に宣言されていて且つ、値が代入済みであれば何もしないという処理に出来る。
(*)ここでイディオムという言葉が出てきたので[JavaScript]のイディオムについて調べましたが、書ききれそうにないのでまた別の機会に。

#変数の参照

example02.js
var a = { x:0, y:1 };
var b = a;
b.x++;
console.log(b.x);
// 2
console.log(a.x);
// 2

このように[b]の参照するオブジェクトを変更すると、[a]まで変わりました。これは同じオブジェクトを参照しているからだそうです。
これは忘れて引っかかりそうだ・・・。
また、上とは別に下のものは

example03.js
var a = { x:0, y:1 };
var b = a;
a = { x:1, y:2 };
console.log(b.x);
// 0

参照型変数で行ったことは参照先のオブジェクトの変更で、変数の値の変更ではないみたい。
なので、[b]の値は[0]から変わらなかったということ。
うわぁ・・・、これはややこしい。

#関数の値渡し

example04.js
// 値を入れ替える
function change(a, b){
	var tmp = a; // tmpに一旦格納しておく
	a = b;
	b = tmp;
}

var hoge = 3;
var piyo = 4;

change(hoge,piyo);	// 値を入れ替える

console.log(hoge, piyo);
// 3, 4

[C/C++]をやったことある人はこれをやってしまいそう?(私はやりそう)ですが、これでは先程の話と同様、値は変わらないみたい。
参照演算子やポインタ演算子がある言語では出来るのですが、[JavaScript]にはそのような言語機能がないみたいなのでこの方法では無理。
じゃあどうすればいいんだ・・・?

example04.js

var hoge = 3;
var piyo = 4;

// 値を入れ替える
var parts = [piyo, hoge];
hoge = parts[0];
piyo = parts[1];

console.log(hoge, piyo);
// 4, 3

こうやってやるみたい。
配列を渡して要素を変更したりオブジェクトの参照を渡してプロパティ値を変更。

#終わりに
私と同様、初めたばかりの人の力になれたらと思います。
そして、まだまだ[JavaScript]の道は長そうです・・・。

10
9
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?