2020年後半のフロントエンドインタビューで会った(1)

フロントエンド

今日遭遇したフロントエンドの面接の質問について書いてください

  1. 長さが不明な配列aがあります。長さが0の場合は、配列に1を追加します。それ以外の場合は、先入れ先出しキュールールに従って最初の要素がデキューされます。
a.length===0?a.push(1):a.shift()
  1. JSはURLのパラメータをオブジェクトに解析します
getUrlKey('http//aaa/txt.php?a=1&b=2&c=3')
function getUrlKey(url){
    
    
	let params={
    
    }
	let urls=url.split('?');
	let arr=urls[1].split('&');
	for(let i=0;i<arr.length;i++){
    
    
		let a=arr[i].split('=');
		params[a[0]]=a[1]
	}
	return params;
}
  1. 次のconsole.logを出力します
 var a = 10;
    (function () {
    
    
        console.log(a);
         a = 20;
        console.log(window.a);
        var a = 30;
        console.log(a)
    })()
   //结果:undefined 10 30
  1. 次のconsole.logを出力します
    let a = 1;
    (function a(){
    
    
        a = 2;
        console.log(a);
    })();
    console.log(a);

//结果:
    ƒ a(){
    
    
    a = 2;
    console.log(a);
} 

1
//(function (){})() 是自执行函数
  1. 次の結果を書き込みます。
  function Foo() {
    
    
        this.a = function () {
    
    
            console.log(1)
        };
        Foo.a = function () {
    
    
            console.log(2)
        }
    }

    Foo.prototype.a = function () {
    
    
        console.log(3)
    };
    Foo.a = function () {
    
    
        console.log(4)
    };

    Foo.a();
    let obj = new Foo();
    obj.a();
    Foo.a();
    
    // 结果:4 1 2
  1. 次の結果を書き込みます。
	function Foo() {
    
    
	 getName = function () {
    
     alert (1); };
	 return this;
	}
	Foo.getName = function () {
    
     alert (2);};
	Foo.prototype.getName = function () {
    
     alert (3);};
	var getName = function () {
    
     alert (4);};
	function getName() {
    
     alert (5);}
	 
	//请写出以下输出结果:
	Foo.getName();//2
	getName();//4
	Foo().getName();//1
	getName();//1
	new Foo.getName();//2
	new Foo().getName();//3
	new new Foo().getName();//3
  1. var s = "are you ok"、jsを書いてare | you | OK |
function split(){
    
    
	var str="are   you okay",
	res=""

	var arr=str.trim().split(/\s+/)
	for(i=0;i<arr.length;i++){
    
    
		 res+=arr[i]+"| "
	}
	return res;
}

  1. 次のように呼び出されたときに正常に機能するsumメソッドを記述します[カレー]
console.log(sum(2,3))// 5
console.log(sum(2)(3))//5
     function add() {
    
    
        // 第一次执行时,定义一个数组专门用来存储所有的参数
        var _args = [].slice.call(arguments);
       

        // 在内部声明一个函数,利用闭包的特性保存_args并收集所有的参数值
        var _adder = function() {
    
    
            _args.push(...arguments);

            return _adder;

        };

        // 利用toString隐式转换的特性,当最后执行时隐式转换,并计算最终的值返回
        _adder.toString = function () {
    
    
            return _args.reduce(function (a, b) {
    
    
                return a + b;
            });
        };
        return _adder;
    }

    add(2,3);
    add(2)(3);

  1. 次の式は何を取得しますか?
	4+3+2+1”

	答案:“914+3+2-1”

	答案:8
  1. 関数の引数は配列ですか?そうでない場合、それを実際の配列に変換する方法は?
    配列ではありません
function func(){
    
    
console.log(arguments);

return [ ].slice.call(arguments);
}
console.log(func(1,2,3))
  1. 次のコード実行の出力は何ですか、そして理由を明確にしてください
var x=3;

var foo={
    
    
	x:2,
	baz:{
    
    
		x:1,
		bar:function(){
    
    
			return this.x;
		}
	}
}

var go=foo.baz.bar;
console.log(go());	//第一个
console.log(foo.baz.bar()); //第二个

this的问题,
首先我们要看第一个,这时this指向的是window
其次看第二个,调用对象是foo.baz
所以这时this指向的是x:1
  1. 実行後の次のコードの出力は何ですか、そして分析プロセスを説明します。
let x=0;

async function test(){
    
    

	x+=await 2;
	console.log(x);
}

test();
x+=1;
console.log(x);

//答案:1 , 2

这里相关的就是同步还是异步

我们程序执行的时候,一般是所有同步的都结束之后,

再执行微任务,然后宏任务

所以asyn 这函数是需要后面执行的

おすすめ

転載: blog.csdn.net/weixin_43814775/article/details/111824919