###前提・実現したいこと
javascriptで
関数testに指定した引数1の変数に、引数2の値を代入したいのですがうまくいきません。
###発生している問題・エラーメッセージ
Uncaught ReferenceError: hello is not defined
###該当のソースコード
function test(name, value){ eval('var ' + name + '=' + value + ';'); } test('hoge', 'hello'); alert(hoge);
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答6件
0
解決済みのようですが、Strict Mode で動作し、実装を選ばない(ブラウザでなくとも動作する)コードを紹介しておきます。
JavaScript
1'use strict'; 2function defineGlobalVariable (name, value) { 3 Function('return this')()[name] = value; 4} 5 6defineGlobalVariable('hoge', 'hello'); 7alert(hoge);
Object.defineProperty()
を併用すると、descriptor を指定可能となり、更に汎用性が高くなります。
Re: aiueo123 さん
投稿2017/07/27 05:15
編集2017/07/27 11:13総合スコア18166
0
ベストアンサー
ユーザ関数test() 内で定義された変数なのでそのスコープ外から参照できないだけでは。
追記:
varで定義するとそのスコープでしか使えない(参考URL:JavaScriptでは、varを使わずに定義した変数はグローバル変数として走査されます。
)のでvarをはずしグローバル変数として定義し、valueを""で囲います
""で囲うのはご提示のエラー(「helloって変数はないよ」)対策です。
※Chromeで動作確認済み alertボックスで「hello」と出力されます
javascript
1function test(name, value){ 2 eval(name + '="' + value + '";'); 3} 4test('hoge', 'hello'); 5alert(hoge);
投稿2017/07/27 04:47
編集2017/07/27 04:56総合スコア80854
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/07/27 04:58
0
こう
var hello = "hello"; function test(name, value){ eval('var ' + name + '=' + value + ';'); } test('hoge', 'hello'); alert(hoge);
またはこうかな?
function test(name, value){ eval('var ' + name + '="' + value + '";'); } test('hoge', 'hello'); alert(hoge);
投稿2017/07/27 04:49
総合スコア78
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/07/27 04:57
0
eval
を使うのはお勧めしませんが、とりあえずエラーが起きない書き方を。
JavaScript
1function test(name, value){ 2 eval('var ' + name + '="' + value + '";'); 3} 4test('hoge', 'hello');
こういうことをしたいのでしょうか。
JavaScript
1function test(name, value){ 2 return value; 3} 4var hoge = test('hello');
ブラウザ限定。
JavaScript
1function test(name, value){ 2 if (window[name]) return; 3 window[name]=value; 4} 5test('hoge', 'hello');
投稿2017/07/27 04:49
編集2017/07/27 04:54総合スコア69446
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/07/27 04:57
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/07/27 05:20