3

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();
getName();
Foo().getName();
getName();
new Foo.getName();
new Foo().getName();
new new Foo().getName();

https://www.cnblogs.com/xxcanghai/p/5189353.html

2. 闭包

function fun(n,o) {
  console.log(o)
  return {
    fun:function(m){
      return fun(m,n);
    }
  };
}
var a = fun(0);  a.fun(1);  a.fun(2);  a.fun(3);//undefined,?,?,?
var b = fun(0).fun(1).fun(2).fun(3);//undefined,?,?,?
var c = fun(0).fun(1);  c.fun(2);  c.fun(3);//undefined,?,?,?
//问:三行a,b,c的输出分别是什么?

https://www.cnblogs.com/xxcanghai/p/4991870.html

https://www.bilibili.com/vide...

3. 2数之和

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

示例
给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
        var nums =[2, 7, 11, 15];
        var target = 9;
        function twoSum(nums,target){
            for(var i = 0;i<nums.length;i++){
                var item1 = nums[i];  //2,7,11,15
                for(var j = i+1;j<nums.length;j++){
                    var item2 = nums[j];  //7,11,15
                    if(item1 + item2 == target){
                        return [i,j]
                    }
                }
            }
        }
        console.log(twoSum(nums,target))

4. 把原始 list 转换成树形结构,要求尽可能降低时间复杂度

    let list = [
      { id: 1, name: '部门A', parentId: 0 },
      { id: 2, name: '部门B', parentId: 0 },
      { id: 3, name: '部门C', parentId: 1 },
      { id: 4, name: '部门D', parentId: 1 },
      { id: 5, name: '部门E', parentId: 2 },
      { id: 6, name: '部门F', parentId: 3 },
      { id: 7, name: '部门G', parentId: 2 },
      { id: 8, name: '部门H', parentId: 4 }
    ];
    
    function convert(array) {
      let reslutArray = array.filter((item) => {
        let children = array.filter((child) => {
          return item.id === child.parentId
        })
        item.children = children
        return item.parentId === 0
      })
      return reslutArray
    }
    let res = convert(list)
    console.log(res) 

5. 把一个字符串的大小写取反(大写变小写小写变大写),例如 ’AbC' 变成 'aBc'

function processString (s) {
    var arr = s.split('');
    var new_arr = arr.map((item) => {
        return item === item.toUpperCase() ? item.toLowerCase() : item.toUpperCase();
    });
    return new_arr.join('');
}
console.log(processString('AbC'));

6. 变量作用域

var a = 10;
(function () {
    console.log(a)
    a = 5
    console.log(window.a)
    var a = 20;
    console.log(a)
})()

相当于

执行解析步骤:  
var a = undefined;  
a = 10;  
(function () {  
// 变量提升(预解析)  
var a = undefined;  
console.log(a); // 输出undefined  
a = 5;  
console.log(window.a); // 找window(全局)对象的a, 输出10  
a = 20;  
console.log(a); // 输出20  
})()

7.

var b = 10;
(function b() {
  b = 20;
  console.log(b)
})()

使之分别打印 10 和 20

var b =10

      ;(functionb(b) {

window.b=20

console.log(b)

      })(b)
var b = 10;
(function b() {
 var b = 20;
 console.log(b)
})()

8.DOMContentLoaded window.onload

1 .DOMContentLoaded,$(document).onready() 事件是在文档完全加载和解析之后触发。

2 .window.onload 事件不但文档完全加载和解析完毕,相关资源都要加载完毕,比如图片和CSS文件等。

所以在很多需求中,window.onload事件并不是最佳选择器,使用DOMContentLoaded事件效率会更高。

http://www.softwhy.com/article-9783-1.html

9.

console.log(x);//输出:function x(){}
var x=1; function x(){}
var x; function x(){}
console.log(x);
x=1;

10. 斐波那契数列

function Fibonacci (n) { 
    if ( n <= 1 ) {return  1}; 
    return Fibonacci(n - 1) + Fibonacci(n - 2); 
}

https://blog.csdn.net/qq\_39300332/article/details/80000837

11. ajax

var request = new XMLHttpRequest(); // 新建XMLHttpRequest对象;
request.onreadystatechange = function () { // 状态发生变化时,函数被回调;
    if (request.readyState === 4) { // 成功完成
        // 判断响应结果:
        if (request.status === 200) {
            // 成功,通过responseText拿到响应的文本:
        } else {
            // 失败,根据响应码判断失败原因:
        }
    } else {
        // HTTP请求还在继续...
    }
}
// 发送请求:
request.open("POST","/skill-ajax/a/login",true);
request.setRequestHeader("Content-type","application/x-www-form-urlencoded");
request.send();
alert('请求已发送,请等待响应...');

// readyState值说明
// 0,初始化,XHR对象已经创建,还未执行open
// 1,载入,已经调用open方法,但是还没发送请求
// 2,载入完成,请求已经发送完成
// 3,交互,可以接收到部分数据

// status值说明
// 200:成功
// 404:没有发现文件、查询或URl
// 500:服务器产生内部错误

12. scoped

deep

13 . js中函数声明先提升还是变量先提升

根据官方书籍《你不知道的javascript》(上卷)中写道:

“函数会首先被提升,然后才是变量”。

例子:

console.log(foo);
function foo(){
    console.log("函数声明");
}
var foo = "变量";

输出为:

function foo(){
    console.log("函数声明");
}

代码实际是:

function foo(){
    console.log("函数声明");
}
var foo;
console.log(foo);   
foo = "变量";

函数提升优先级比变量提升要高,且不会被变量声明覆盖,但是会被变量赋值覆盖。
在最后再加上打印就能看到函数已经被覆盖了。

https://www.cnblogs.com/miacara94/p/9173843.html

var a = 4;

function a(){

return 6

}

console.log(a) // 4

console.log(a()) // a is not a function
function a(){

return 6

}

var a =4;

console.log(a) // 4

console.log(a()) // a is not a function

https://blog.csdn.net/qq\_32766999/article/details/99213831


渣渣辉
1.3k 声望147 粉丝