直ちに関数とletを実行します.

1178 ワード

javascriptには私有作用域の概念がないが、実は現在のes 6のlet声明はこのような問題を解決するためである.しかし、国内のほとんどの会社の面接官は、var声明の問題やすぐに関数を実行する問題を聞くのが好きです.
1.js検索変数は内から外に従い、一階の検索は上へ検索しなくなります.undefinedに戻るまで調べられません.
プライベートドメインとは何ですか?
var a = 100;

if(a>10){
  var b = 200;
}

console.log(b);//200
bは意外にも200まで出力しています.このように不合理です.私が表現したいのはbが自分の大括弧の中で使用できます.この大括弧を出たら他の人は見えません.
従って、es 6はletを提案し、プライベート・ロール領域という問題を解決した.
その中の二点があります
var宣言のbは、たとえif条件がfalseであっても、bという変数はピットを占めていますので、後はundefinedだけを出力します.
let声明のbは、if条件trueであれfalseであれ、bは自分の大括弧内でのみ有効であり、この大括弧から出ると、誰も知らないので、出力bの行は永遠に間違っています.
以上のletの効果は永遠にこのようにシミュレーションできます.
var a = 100;

if(a>10000){
  (function() {
    var b=200;
  })()
}

console.log(b);
即時実行関数はブロックレベルのスコープ感覚を実現し、容器のように感じられます.内部宣言の変数は永遠に外部からは分かりませんが、内部は外部宣言の変数にアクセスできます.したがって、内部で定義された変数は外部の変数と衝突しません.通称「匿名のカプセル」または「名前空間」です.
変態の面接問題:
var name

(function() {
  //  name        
  if(name === undefined){
    console.log('hello world')
  }else {
    console.log('hello js')
  }
})()
実行結果:ハローjs
nameはwindowオブジェクトのデフォルトの属性であるため(クロスドメインを実現するため)、再度デフォルト値は空の文字列であることを宣言します.だからnameはundefinedに等しくないです.