IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 前端实习面试记录 2021年9月30日 -> 正文阅读

[JavaScript知识库]前端实习面试记录 2021年9月30日

作者:recommend-item-box type_blog clearfix

? ? ? ?先是笔试,笔试主要是一些较为简单的代码解释输出。最后两道大题,第一道是要写出一个求和的函数,第二道是编写一个函数让其对输入的数组进行判断,若该数组中有两个数相加等于给定的另一个数,则将这个两个数的索引进行输出。twoSum([2,7,4,5,6],9)

面试时主要聊到了:

闭包:

1.变量作用域

要理解闭包,首先要理解变量JavaScript的特殊的变量的作用域。

变量的作用域有两种:全局变量和局部变量。

JavaScript的特别之处就在于:函数内部可以直接读取全局变量,但是函数外部无法读取函数内部的局部变量。

注意点:在函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明的是一个全局变量!

2.如何从外部读取函数内部的局部变量?

那就是在函数内部,再定义一个函数。

function f1(){
    var n=999;
    function f2(){
        alert(n); // 999
    }
}

在上面的代码中,函数f2就被包括在函数f1内部,这时f1内部的所有局部变量,对f2都是可见的。但是反过来就不行,内部的局部变量,对f1就是不可见的。?

这就是JavaScript语言特有的“链式作用域结构”(chain scope),子对象会一级一级地向上寻求所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立。既然f2可以读取f1中的局部变量,那么只要把f2作为返回值,我们就可以在f1的外部读取它的内部变量了!!!

3.闭包的概念

上面代码的f2函数,就是闭包。个人理解:闭包就是能够读取其他函数内部变量的函数。

由于在JavaScript中,只有函数内部的子函数才能读取局部变量,所以说,闭包可以简单理解成“定义在一个函数内部的函数”。所以,在本质上,闭包是将函数内部和函数外部连接起来的桥梁。

4.闭包的用途

闭包最大的用途有两个:1.可以读取函数内部的变量,2.让这些变量的值始终保持在内存中,不会再f1调用后被自动清除。

为啥会如此呢?因为f1是f2的父函数,f2被赋予了一个全局变量,所以f2始终在内存中,而f2的存在依赖于f1,因此f1也始终在内存中,不会在调用结束后,被垃圾回收机制回收。

5.使用闭包的注意点

? (1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄漏。解决方法是,在退出函数之前,将不使用的局部变量全部删除。

? ? ?(2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当做对象(object)使用,把闭包当做它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这是一定要小心,不要随便改变父函数内部变量的值。

数据绑定

1.数据双向绑定

(1)什么是数据双向绑定?

? ? ?vue是一个mvvm框架,即数据双向绑定,即当数据发生变化的时候,视图也就发生变化,当视图发生变化的时候,数据也会跟着同步变化。值得注意的是:我们说的数据双向绑定,一定是对于UI控件来说的,非UI控件不会涉及到数据双向绑定。单向数据绑定是使用状态管理工具(如redux)的前提。如果我们使用vuex,那么数据流也是单向的,这时就会和双向数据绑定有冲突。

(2)为什么要实现数据双向绑定?

?在vue中,如果使用vuex,实际上数据还是单向的,之所以说是数据双向绑定,这是用的UI控件来说,对于我们处理表单,vue的双向数据绑定用起来就特别舒服了。

即两者并不互斥,在全局性数据流使用单项,方便追踪;局部性数据流使用双向,简单易操作。

2.单向数据流

数据流,表明的是数据流向,单向数据流式我们的数据单一方向传输。对于Vue来说,组件之间的数据传递具有单向数据流这样的特性。对于父子组件来说,父组件总是通过props向子组件传递数据。所有的prop都使得其父子prop之间形成了一个单向下行绑定:父级prop的更新会向下流动到子组件中,但是反过来则不行。这样能防止子组件意外改变父组件的状态,从而导致应用的数据流向难以理解。另,每次父级组件发生更新时,子组件中所有的prop都将会刷新为最新的值。这意味着你不应该在一个子组件内部改变prop。如果你这样做了,Vue会在浏览器的控制台中发出警告。

注意在JavaScript中对象和数组是通过引用传入的,所以对于一个数组或对象类型的prop来说,在子组件中改变这个对象或数组本身将会影响到父组件的状态。

3.单向数据流与双向数据绑定的联系与区别

对于非UI控件来说,不存在双向,只有单向。只有UI控件才有双向的问题。单向绑定使得数据流也是单向的,对于复杂应用来说这是实施统一的状态管理(如Vuex)的前提。双向绑定在一些需要实时反应用户输入的场合会非常方便(比如表单提交)。但通常认为复杂应用中这种便利比不上引入状态管理带来的优势。

单向数据流和双向数据绑定有什么优缺点?

单向数据流优缺点:

优点:

(1)所有状态的改变可记录、可跟踪,源头易追溯;

? (2)所有数据只有一份,组件数据只有唯一的入口和出口,使得程序更直观更容易理解,有利于应用的可维护性。

(3)一旦数据变化,就去更新页面(data-页面),但是没有(页面-data);

(4)如果用户在页面上做了变动,那么就手动收集起来(双向是自动),合并到原有的数据中。

缺点:

(1)HTML代码渲染完成,无法改变,有新数据,就必须把旧HTML代码去掉,整合新数据和模版重新渲染;

(2)代码量上升,数据流转过程变长,出现很多类似的样板代码;

(3)同时由于对应用状态独立管理的严格要求(单一的全局store),在处理局部状态较多的场景时(如用户输入交互较多的“富表单型”应用),会显得啰嗦及繁琐。

双向数据绑定的优缺点:

优点:

(1)用户在视图上的修改会自动同步到数据模型中去,数据模型中值的变化也会立刻同步到视图中去。

(2)无需进行和单向数据绑定的哪些相关操作;

(3)在表单交互较多的场景下,会简化大量业务无关的代码。

缺点:

(1)无法追踪局部状态的变化

(2)“暗箱操作”,增加了出错时debug的难度;

(3)由于组件数据变化来源入口变得可能不止一个,数据流转方向易紊乱。

原文链接地址:详解单向数据流与双向数据绑定_张印的博客-CSDN博客_单向数据流和双向数据绑定

JS中的数据类型

6 种数据类型:

  • string
  • number
  • boolean
  • object
  • function
  • symbol

3 种对象类型:

  • Object
  • Date
  • Array

2 个不包含任何值的数据类型:

  • null
  • undefined?

python数据类型:

  • Number(数字)
  • String(字符串)
  • List(列表)
  • Tuple(元组)
  • Set(集合)
  • Dictionary(字典)

ES6中新增了Symbol。这种类型的对象永不相等,即使创建的时候传入相同的值,可以解决属性名冲突的问题,做为标记。

谷歌67版本中还出现了一种bigInt。是指安全存储、操作大整数。

AJAX

AJAX=异步 JavaScript和XML

AJAX是一种用于创建快速动态网页的技术。

通过在后台与服务器进行少量数据交换,AJAX可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

传统的网页(不适用AJAX)如果需要更新内容,必须重载整个网页。

?

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-01 16:46:55  更:2021-10-01 16:47:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 22:07:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码