前端笔记

34 篇文章 0 订阅

js相关

1、表达式有值,语句没有值

console.log(1)//这里的console是表达式有值,浏览器控制台会打印1、undefind
setTimeout(() => { console.log(1); }, 0);//这里的console是语句

2、var let count区别

var可以先赋值后声明,没有严格模式
let count 是块级作用域,count不能常量不能重复赋值,数组、对象可以赋值,添加属性
let age = 6;if(true){age = 10}
console.log(age)//10
let age = 6;if(true){let age = 10}
console.log(age)//6

count name = '杨帆'
      name = '远航'//会报错,不能重复赋值



var作用域问题
x = 1;
alert(x);
var y = function() {
  alert(x);
  var x = 2;
  alert(x);
}
y();


// 1,undefined,2





var val = 12;
function fun1(){//这个作用域有val,不找外面的,val提升未赋值
    console. log('val====',val);
    var val = 20;
    console.log(val);
}
fun1(); // undfined  20


var val = 12;
function fun1(){ //这个作用域没有val找外面的
    console. log('val====',val);
}
fun1(); // 12

3、闭包是指有权访问另一个函数作用域中的变量的函数

      即如何从外部读取函数内部的变量问题?

 alertName可以读取outFun中的变量,只要把alertName作为返回值,就可以在outFun外读取outFun内部变量
   function init() {
       var name = "Chrome";    //创建局部变量name和局部函数alertName
       function alertName() { //alertName()是函数内部方法,是一个闭包
          console.log(name); //使用了外部函数声明的变量,内部函数可以访问外部函数的变量
       }
       alertName();
   }
   init();

4、js数据类型

 基础类型 String、Number、boolean、null、undefined、symbol
 引用类型 object

5、Promise是为了解决异步问题

      async/await是一对好基友,缺一不可,async相当于Promise,他们是为promise服务的是promise的进化版

    <script>
        // 主要考察宏任务和微任务,执行顺序先是宏任务-->微任务-->宏任务-->微任务一直循环下去;
        // 宏任务一般是:包括整体代码script,setTimeout,setInterval。
        // 微任务:Promise,proces

        console.log('1')
        async function async1(){//相当于promise
            console.log('2')
            await async2()
            console.log('3')
        }
        async function async2(){
            console.log('4')
        }
        // promise的resolve优先于process.nextTick()优先于promise.then()执行
        // async相当于promise await优先then先执行
        process.nextTick(function(){
            console.log('5')
        })
        setTimeout(function(){
            console.log('6')
            process.nextTick(function(){
                console.log('7')
            })
            new Promise(function(resolve){
                console.log('8')
                resolve()
            }).then(function(){
                console.log('9')
            })
        })
        async1()
        new Promise(function(resolve){
            console.log('10')
            resolve()
        }).then(function(){
            console.log('11');
        });
        console.log('12')
        /* 打印结果  1 2 4  5 10 12 3 11 6 8 7 9 */ 
    </script>

6、节流和防抖(input输入搜索、resize页面调整,拖动)

转载https://dujian.blog.csdn.net/article/details/100673689

函数节流(throttle)与 函数防抖(debounce)都是为了限制函数的执行频次,以优化函数触发频率过高导致的响应速度跟不上触发频率,出现延迟,假死或卡顿的现象。
函数防抖:将多次操作合并为一次操作进行。原理是维护一个计时器,规定在delay时间后触发函数,但是在delay时间内再次触发的话,就会取消之前的计时器而重新设置。这样一来,只有最后一次操作能被触发。
函数节流:使得一定时间内只触发一次函数。原理是通过判断是否有延迟调用函数未执行。
区别: 函数节流不管事件触发有多频繁,都会保证在规定时间内一定会执行一次真正的事件处理函数,而函数防抖只是在最后一次事件后才触发一次函数。 比如在页面的无限加载场景下,我们需要用户在滚动页面时,每隔一段时间发一次 Ajax 请求,而不是在用户停下滚动页面操作时才去请求数据。这样的场景,就适合用节流技术来实现。

7、1w条数据如何处理

8、es6数组去重Set

9、一个数组,如何取出数组对象中的某个属性返回一个新数组

     arr.map(item=>item.name)

10、Object.assign()用法

11、递归(程序调用自身的编程技巧就称之为递归(recursion),就是再运行的过程中调用自己,本质上就是循环.)

12、小程序页面跳转最多几次(最多打开5个页面)可搭配wx.redirectTo关闭当前页面解决

转载部分

1》typeof类型

	typeof NaN  ==> number
	typeof null ==> object
	typeof undefined ==>undefined

2》作用域、变量提升性

	作用域:先在内部找,如果内部找不到,向外查找

优先级:
		变量  > 普通函数  > 参数 > 提升

3》es6中使用new Set()去重

	问题:同值不同类型,不能去除

4》浅拷贝、深拷贝


	浅拷贝:拷贝对象属性
		   问题:一个改变,互相影响

	深拷贝:拷贝源对象
           解决:一个改变,互相不影响


5》判断一个东西是否 是数组

	instanceof

	[].__proto__.constructor==Array


6》数组方法 : pop 、push 、 unshift 、shift


	push    :向数组末尾添加内容、返回数组长度
	unshift :向数组第一位添加内容、返回数组长度

	pop     :删除数组末尾、返回删除谁
	shift   :删除数组第一位、返回删除谁

7》dom操作
	
	添加:appendChild
	移除:removeChild
	移动:replaceChild
	插入:insertBefore
	复制:clone
	创建:createElement
	查找节点:getElementById

8》阻止冒泡和默认行为

	阻止冒泡:

		if(e.stopPropagation){
			e.stopPropagation();
		}else{
			e.cancelBubble = true;
		}

	默认行为:
		
		if(e.preventDefault){
			e.preventDefault()
		}else{
			e.returnValue=false
		}

9》new操作符具体做了什么?
	
	1》创建对象
	2》赋值操作 (给予属性或者方法)
	3》this指向 (函数.call(对象))

10>js中的延迟加载

	<script src='a.js' async></script>
	<script src='a.js' defer='defer'></script>

	
11>use strict

	是什么===》严格模式(解决一些js的怪癖行为的)
	好处  ===》检测代码的,压缩的节约文件大小
	坏处  ===》阻塞后面代码的运行,压缩出现错误

12>js创建对象的方式

	
	1> {} | new Object()
	2> 构造函数new 
	3> Object.create()
	
13>判断图片加载完成

	complete属性

14>事件委托

	var e = window.event || e;
	var tar = e.target || e.srcElement;

15>let和const区别

	const声明必须赋值
	const不可变化的量(常量)

16>cookie、localStorage、sessionStorage区别


	1》存储大小不同

		cookie不能超过4k

		localStorage、sessionStorage:5m或者更多
	
	2》数据有效期
		
		cookie可以设置生命周期
		
		localStorage 一直保持,手动清除
		
		sessionStorage 关闭页面或者浏览器就清除了

	3》作用域不同

		sessionStorage ==〉只能在当前页面有效

		localStorage、cookie : 不同页面也会存在

	4》Web storage 支持事件通知机制、可以更新数据时发送给事件监听者


17>把arguments转换为真正的数组

	Array.from
	

18>call、apply、bind区别

	bind==》返回函数
	call==》 函数.call(null,1,2,3,4)
	apply==》函数.call(null,[1,2,3,4])


 13、Array.slice(start,end)(不包括end该元素)不会改变原数组从哪到哪开始删除/截取、返回一个新的数组,包含从 start 到 end (不包括该元素)的 arrayObject 中的元素。

14、 Array.splice(index,howmany,item1...itemx)方法向/从数组中添加/删除项目,然后返回被删除的项目。该方法会改变原始数组

  • index 删除开始位置的索引
  • howmany删除的数量几个长度
  • item1...itemx传递新元素,这些元素可以插入到开始位置索引前边
  • 会改变原有的数组

15、作用域

   function test(){

        var n = 4399;

        function add(){

            n++;

            console.log('n=',n)

        }

        return { n:n,add:add }

    }

    var result = test();

    var result2 = test();

    result.add();//4400

    result.add();//4401

    console.log(result.n);//4399

    result2.add();//4400

push()、pop()和unshift()、shift()区别

push()、pop() 是从数组的尾部进行增减

unshift()、shift() 是从数组的头部进行增减

push()和unshift()  向数组的 尾部/头部 添加若干元素,并返回 数组的 新长度;

pop()和shift()   从数组的 尾部/头部 删除1个元素(删且只删除1个),并返回 被删除的元素

15、提取url的主域

function getDomain(weburl){ 
    var urlReg=/https:\/\/([^\/]+)/i; 
    domain = weburl.match(urlReg); console.log(domain)
    return ((domain != null && domain.length>0)?domain[0]:"");
}

16、Math.round 0.5向下取整  (经典题型)

Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在参数上加0.5然后进行下取整

17、面向对象的三大特性包括:封装,继承,多态

18、false、0、null、undefined和字符串的关系null==undefined

18、对于“+”来说,有两个含义:第一个含义是做字符串拼接,第二个含义是加减法中的加法。代码var foo = "10"+3-"1";console.log(foo);执行后,foo的值为102

    1,如果操作数里有一个是字符串,其他的值将被转换成字符串;

    2,其他情况,操作数转换成数字执行加法运算。

而对于“ - ”来说,只有一个含义,就是做减法,自然不会转化成字符串了

19、js中 0.1+0.2 为什么不等于0.3 怎样解决(浮点数精度问题)

 

小程序相关

 

1、小程序生命周期

2、小程序页面传递数据方法

3、怎么封装小程序数据请求的

4、bindtap/catchtap区别

5、用什么方法提高微信小程序的应用速度

6、一个列表点击详情,返回列表显示上次位置

BFChttps://blog.csdn.net/qq_39394518/article/details/95221350

1、布局,浮动、块级元素

BFC 全称为 块级格式化上下文(Block Fromatting Context),是Web页面的可视化CSS渲染出的一部分。它是块级盒布局出现的区域,也是浮动层元素进行交互的区域。简单的来说,它就是一种会影响元素与元素之间的位置、间距的属性

vue相关

转载https://segmentfault.com/a/1190000019162582

转载https://blog.csdn.net/sinat_17775997/article/details/66539491?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160689605419725211964284%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=160689605419725211964284&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_v1~rank_blog_v1-1-66539491.pc_v1_rank_blog_v1&utm_term=vue%E7%AC%94%E8%AE%B0&spm=1018.2118.3001.4450

1、vue生命周期

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值