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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。