タグ付けされた質問 「scoping」


6
Rで「<<-」(スコープ指定)をどのように使用しますか?
Rイントロでのスコープについて読み終え​​たばかりで、その&lt;&lt;-割り当てについて非常に興味があります。 マニュアルには、の1つの(非常に興味深い)例が示さ&lt;&lt;-れていました。私がまだ足りないのは、これがいつ役立つかというコンテキストです。 だから私があなたから読んでもらいたいのは、の使用&lt;&lt;-が興味深い/役に立つ場合の例(または例へのリンク)です。それを使用することの危険性とは何か(簡単に追跡できなくなっているように見える)、および共有したいと思うかもしれないヒント。

18
JavaScript関数のスコープとホイスト
Ben CherryによるJavaScript Scoping and Hoistingに関するすばらしい記事を読んだところ、彼は次の例を示しています。 var a = 1; function b() { a = 10; return; function a() {} } b(); alert(a); 上記のコードを使用すると、ブラウザは「1」を警告します。 それが「1」を返す理由はまだわかりません。彼が言うことのいくつかは次のように思い浮かびます:すべての関数宣言は上に持ち上げられます。関数を使用して変数のスコープを設定できます。まだクリックしません。

8
ブラウザ内のJavaScriptにはノードスタイルが必要ですか?
ノードと同じ柔軟性/モジュール性/使いやすさを提供するブラウザ内JavaScript用のライブラリはありますrequireか? 詳細を提供するために:理由requireはとても良いですそれはそれです: コードを他の場所から動的にロードできるようにします(これは、すべてのコードをHTMLでリンクするよりも、スタイル的に優れていると思います)。 モジュールを構築するための一貫したインターフェースを提供します モジュールが他のモジュールに依存するのは簡単です(たとえば、jQueryを必要とするAPIを記述して、使用できるようにすることができます) jQuery.ajax() ロードされたJavaScriptはスコープが設定されています。つまり、ロードしvar dsp = require("dsp.js");てアクセスできるためdsp.FFT、ローカルに干渉することはありません。var FFT これを効果的に行うライブラリはまだ見つかりません。私がよく使用する回避策は次のとおりです。 coffeescript-concat-他のjsを必要とするのは簡単ですが、コンパイルする必要があります。つまり、高速開発(テスト中のAPIの構築など)にはあまり適していません。 RequireJS-人気があり、簡単で、1〜3を解決しますが、スコープの欠如は本当に大きな問題です(head.jsは、スコープがないという点で似ていると思いますが、使用する機会はありませんでした。同様に、LABjsは.wait()依存関係の問題をロードして緩和できますが、それでもスコープは実行されません) 私の知る限り、JavaScriptの動的および/または非同期ロードには多くの解決策があるようですが、HTMLからjsをロードするのと同じスコープの問題が発生する傾向があります。何よりも、グローバル名前空間をまったく汚染しないが、ライブラリをロードして使用できるようにするJavaScriptをロードする方法が必要です(ノードの要求と同じように)。 2020年の更新: モジュールはES6で標準になり、2020年半ばの時点で、ほとんどのブラウザーでネイティブにサポートされています。モジュールは、同期と非同期(Promiseを使用)の両方のロードをサポートします。私の現在の推奨事項は、ほとんどの新しいプロジェクトでES6モジュールを使用し、トランスパイラーを使用してレガシーブラウザー用の単一のJSファイルにフォールバックすることです。 一般的な原則として、今日の帯域幅も通常、私が最初にこの質問をしたときよりもはるかに広くなっています。したがって、実際には、ES6モジュールで常にトランスパイラーを使用し、ネットワークではなくコード効率に注力することを合理的に選択する場合があります。 以前の編集(またはES6モジュールが気に入らない場合):これを書いた後、私はRequireJSを広範囲に使用しました(これにより、より明確なドキュメントが作成されました)。私の意見では、RequireJSは本当に正しい選択でした。私と同じように混乱している人々のためにシステムがどのように機能するかを明らかにしたいと思います。 require日常の開発にご利用いただけます。モジュールは、関数(通常はオブジェクトまたは関数)によって返されるものであれば何でもかまいません。スコープはパラメーターです。を使用してプロジェクトを単一のファイルにコンパイルしてデプロイすることもできますr.js(実際には、requireスクリプトを並行してロードできますが、これはほとんどの場合高速です)。 RequireJSとnode-stylerequireのようなbrowserify(tjamesonによって提案されたクールなプロジェクト)の使用の主な違いは、モジュールの設計方法と必要方法です。 RequireJSはAMD(非同期モジュール定義)を使用します。AMDでは、requireロードするモジュール(javascriptファイル)のリストとコールバック関数を取ります。各モジュールをロードすると、コールバックのパラメータとして各モジュールを使用してコールバックを呼び出します。したがって、これは真に非同期であるため、Webに最適です。 ノードはCommonJSを使用します。CommonJSではrequire、モジュールをロードしてオブジェクトとして返すブロッキング呼び出しです。これは、ファイルがファイルシステムから読み取られるため、ノードでは正常に機能します。これは十分に高速ですが、ファイルの同期ロードに時間がかかる可能性があるため、Webではうまく機能しません。 実際には、多くの開発者は、AMDを目にする前にNode(したがってCommonJS)を使用していました。さらに、多くのライブラリ/モジュールはexports、AMD(define関数からモジュールを返す)ではなく、CommonJS(オブジェクトに物を追加することによって)用に記述されています。したがって、ノード化されたWeb開発者の多くは、Web上でCommonJSライブラリを使用したいと考えています。&lt;script&gt;タグからの読み込みがブロックされているため、これが可能です。browserifyのようなソリューションは、CommonJS(Node)モジュールを取得してラップし、スクリプトタグで含めることができるようにします。 したがって、Web用に独自のマルチファイルプロジェクトを開発している場合は、RequireJSを強くお勧めします。これは本当にWeb用のモジュールシステムです(ただし、公正な開示では、AMDはCommonJSよりもはるかに自然です)。最近、RequireJSで基本的にCommonJS構文を使用できるようになったため、この区別はそれほど重要ではなくなりました。さらに、RequireJSを使用してノードにAMDモジュールをロードできます(ただし、node-amd-loaderの方が好きです)。

1
Rでの関数のスコープと評価
次の関数を考える f &lt;- function(x) { g &lt;- function(y) { y + z } z &lt;- 4 x + g(x) } Rで次のコードを実行すると、答えはなぜ10になりますか?yがこの質問にどのように対応するかについて少し混乱しています。 z &lt;- 10 f(3)
8 r  scoping 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.