2021.3.5 前端题

本文深入探讨了HTML元素的alt和title属性的区别,CSS中的FOUC现象及其避免方法,JavaScript中的闭包概念及其优缺点,并通过实例展示了Vue中如何重置data。同时,文章通过代码示例详细解释了JavaScript闭包的运用及常见陷阱,对于前端开发者具有较高的参考价值。
摘要由CSDN通过智能技术生成

【HTML】元素的alt和title有什么区别?

  • alt属性可用于<img>、、<area>元素中,最常用于<img>标签上,是图片无法正常显示时的替代文本。
    用于<input>标签时,是用来替换点击按钮的图片。

  • title属性规定了元素的额外信息,在鼠标悬停在元素上一段时间后出现的提示文本。通常与<a><from>元素一同使用,为链接添加描述性信息

<img class="" src="" alt="这里是1024个字符长度内的字符串" title="悬停在图片上会出现的提示文字">

<title> 元素可定义文档的标题。
浏览器会以特殊的方式来使用标题,并且通常把它放置在浏览器窗口的标题栏或状态栏上。同样,当把文档加入用户的链接列表或者收藏夹或书签列表时,标题将成为该文档链接的默认名称。 标签是 标签中唯一要求包含的东西。

<head>
 <title="文档标题">
</head>

【CSS】什么是FOUC?如何避免FOUC的?

FOUC(Flash Of Unstyled Content)无样式内容闪烁。
指在加载页面时短暂的出现CSS样式失效。
不同的浏览器有不同的渲染规则,但总的来说就是两部分:元素和样式。IE浏览器会先加载HTML的DOM,然后在CSS全部加载出来后渲染页面样式。如果样式使用@import导入,或将样式表置于页面底端,中间不可避免的有一段时间是没有样式的。
可以使用link引入样式,将样式表置于<head>中

【JS】什么是闭包?优缺点分别是什么?

  • 什么是闭包
    可以访问另一个函数作用域的变量的函数。可以认为是定义在函数内的函数。由于JS的特性,外层函数不能访问内层函数的变量,但内层函数可以访问外层函数的变量。
# 一个普通函数
fuction one(a){
	console.log(a)
}
# 在函数里定义的函数
function two(){
	var a
	# 没有名字,这个就是闭包函数,它可以访问fuction two()的变量
	two=function(){
		console.log(a)
	}
	return two
}

加俩题:
(1)

var name = "the window";
var obj = {                    
    name : "myObject",          // 属性
    getNameFunc:function(){     // 方法
        return function(){
            return this.name;
        };
    }
};
alert(obj.getNameFunc()());        // 输出了 “the window”;

没有形成闭包环境
(2)

var name2 = "the window";
var obj2 = {                            
    name2:"my name is a obj",
    getNameFunc2 :function fn1(){
        var that = this;    
        return function(){
            return that.name2;  
        };
    }
}
alert(obj2.getNameFunc2()());    // 输出 my name is a obj

两个条件:1、函数嵌套;2、父函数里有变量给闭包引用。形成了闭包环境。

  • 闭包的优缺点
    优点:
    缺点:
    • 闭包会携带父函数的变量的作用域,所有变量都存在内存,内存占用多,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
    • 引用的变量可能已经变化
function outer() {
      var result = [];
      forvar i = 0; i<10; i++{
        result.[i] = function () {
            console.info(i)
        }
     }
     return result
}

不会输出1,2,。。。10,因为每个闭包函数访问变量i是outer执行环境下的变量i,随着循环的结束,i已经变成10了,所以执行每个闭包函数,结果打印10, 10, …, 10
解决办法:

function outer() {
      var result = [];
      forvar i = 0; i<10; i++{
        result.[i] = function (num) {
             return function() {
                   console.info(num);    // 此时访问的num,是上层函数执行环境的num,数组有10个函数对象,每个对象的执行环境下的number都不一样
             }
        }(i)
     }
     return result
}

闭包的一些坑

ps:记一下变量提升

【Vue】vue中怎么重置data?

this.$options.data() 获取原始的data值,this.$data 获取当前状态下的data。Object.assign(this.$data, this.$options.data())就可以将当前状态的data重置为初始状态

**Object.assign()**方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。

目标对象有1个,后边可以有多个源对象。注意他只会拷
贝源对象自身且是可枚举的属性到目标对象。该方法使用源对象的[[Get]]和目标对象的[[Set]],所以它会调用相关 getter 和 setter。

ps:Object.assign()是浅拷贝

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值