Webフロントエンド筆記試験面接問題集
1958 ワード
Webフロントエンド筆記試験面接問題集
JavaScript関連
1.変数の昇格
JSコードを実行すると、実行環境が生成されます.コードが関数に書かれていない限り、グローバル実行関数では、関数のコードが関数実行環境を生成します.この2つの実行環境しかありません.実行環境を生成するには、2つのフェーズがあります.第1段階は作成段階で、JS解釈器は昇格する必要がある変数と関数を探し出して、そして彼らに早めにメモリの中で空間を開拓して、関数は全体の関数をメモリの中に保存して、変数はただ宣言してそして
2.apply、call、bindの違い
2.1.
2.2.
2.3.
JavaScript関連
1.変数の昇格
JSコードを実行すると、実行環境が生成されます.コードが関数に書かれていない限り、グローバル実行関数では、関数のコードが関数実行環境を生成します.この2つの実行環境しかありません.実行環境を生成するには、2つのフェーズがあります.第1段階は作成段階で、JS解釈器は昇格する必要がある変数と関数を探し出して、そして彼らに早めにメモリの中で空間を開拓して、関数は全体の関数をメモリの中に保存して、変数はただ宣言してそして
undefined
に値を割り当てます;したがって、第2段階、すなわちコード実行段階では、直接事前に使用することができます.アップグレード中は、同じ関数が前の関数を上書きし、関数が変数よりも優先されます.b(); // b;
function b(){
console.log('a');
}
function b(){
console.log('b');
}
var b = 'c';
2.apply、call、bindの違い
call
およびapply
は、this
の指向を変更することを解決するために使用され、作用は同じであるが、伝達されるパラメータは異なる.最初のパラメータに加えて、call
は1つのパラメータリストを受け入れることができ、apply
は1つのパラメータ配列のみを受け入れることができる.bind
と他の2つの方法の役割も一致しているが、この方法は関数を返す.2.1.
call
関数の実装Function.prototype.myCall = function(context){
var context = context || window;
// context fn
//add.call(a, b,c)==>a.add(b,c);
//this call , add
context.fn = this;
var args = [...arguments].slice(1);
var result = context.fn(args);
delete context.fn;
return result;
}
2.2.
apply
関数の実装Function.prototype.myCall = function(context){
var context = context || window;
context.fn = this;
var result;
//
if(arguments[1])
result = context.fn(...agguments[1]);
else
result = context.fn();
delete context.fn;
return result;
}
2.3.
bind
関数の実装Function.prototype.myBind = function (context) {
if (typeof this !== 'function') {
throw new TypeError('Error')
}
var _this = this;
var args = [...arguments].slice(1);
//
return function F() {
// , new F(),
if (this instanceof F) {
return new _this(...args, ...arguments);
}
return _this.apply(context, args.concat(...arguments));
}
}