2024年最新【举栗说明】JavaScript作用域,一次性给你总结!,腾讯Web前端面试题社招

常用的JavaScript设计模式

  • 单体模式

  • 工厂模式

  • 例模式

函数

作用域链

var num=10;`` function f1() { `` var num=20; `` function f2() { `` var num=30; `` function f3() { `` var num=50; `` console.log(num); `` } f3();`` } f2();`` } f1();

03 函数案例


求2个数中的最大值

function getMax(num1, num2) {`` return num1 > num2 ? num1 : num2; `` } console.log(getMax(10,20));`` //console.log(getMax);//函数的代码 function getMax(num1, num2) {`` return num1 > num2 ? num1 : num2; `` } var num1=10;`` var num2=20; `` //函数外面的num1和函数的形参num1不是同一个变量 var result=getMax(num1,num2);`` console.log(result); ``console.log(getMax);//函数的代码

求3个数中的最大值​​​​​​​

function getThreeMax(x, y, z) {`` return x > y ? (x > z ? x : z) : (y > z ? y : z); `` } console.log(getThreeMax(10,2,24));

判断一个数是否是素数(质数),只能被1和自身整除,质数是从2开始

用这个数字和这个数字前面的所有的数字整除一次(没有1的,没有自身的)

function isPrimeNumber(num) {`` for (var i = 2; i < num; i++) { `` if (num % i == 0) { `` //说明有一个数字整除了,就没有必要向后继续整除了, //此时就已经验证出不是质数 return false;`` } } return true;`` }``// console.log(isPrimeNumber(7) ? "yyyyyes" : "nnnnnno") var aa = isPrimeNumber(17);`` if (aa) { `` console.log("yes"); `` } else { `` console.log("no"); `` }

function isPrimeNumber(num) {`` for(var i=2;i<num;i++){ `` if(num%i==0){ `` //说明有一个数字整除了,就没有必要向后继续整除了,此时就已经验证出不是质数 return false;`` } } return true;`` } console.log(isPrimeNumber(8)?"是质数":"不是质数");

var result=isPrimeNumber(2);`` if(result){ `` console.log("这个数字是质数"); `` }else{ `` console.log("这个数字不是质数"); `` }

function aaa(x,y){`` return x-y; `` } console.log(aaa(99,88))

通过函数实现数组反转​​​​​​​

function reverseArray(arr) {`` for (var i = 0; i < arr.length / 2; i++) { `` var temp = arr[i]; `` arr[i] = arr[arr.length - 1 - i]; `` arr[arr.length - 1 - i] = temp; `` } return arr;`` } console.log(reverseArray([1, 2, 3, 4, 5]));

通过函数实现冒泡排序​​​​​​​

function sortArray(arr) {`` //控制比较的轮数 for (var i = 0; i < arr.length - 1; i++) {`` //控制每一轮的比较次数 for (var j = 0; j < arr.length - 1 - i; j++) {`` if (arr[j] > arr[j + 1]) { `` var temp = arr[j]; `` arr[j] = arr[j + 1]; `` arr[j + 1] = temp; `` }//end if }//end for }//end for return arr; } console.log(sortArray([0, 19, 34, 10, 100, 2]));

求一个数字的阶乘​​​​​​​

function getJieCheng(num) { `` var result = 1; `` for (var i = 1; i <= num; i++) { `` result *= i; `` } return result; }``console.log(getJieCheng(5));//1*2*3*4*5

求斐波那契数列​​​​​​​

function getFib(num){`` var num1=1; `` var num2=1; `` var num3=0; `` for(var i=3;i<=nnum;i++){ `` sum=num1+num2; `` num1=num2; `` num2=sum; `` } return sum;`` } console.log(getFib(12))

02 函数作为参数使用


函数是有数据类型,数据类型:是function类型的

函数可以作为参数使用,如果一个函数作为参数,那么我们说这个参数(函数)可以叫回调函数 只要是看到一个函数作为参数使用了,那就是回调函数​​​​​​​

function sayHi(fn) {   console.log(“GOOD”); fn();//fn此时应该是一个函数}function suSay() { console.log(“HELLO”); }sayHi(suSay);` `function f1(x,y) { console.log(x+y); }f1(10,20);` `function f2(x,y) { console.log(x+y); }f2("HLS","MISS");` `function f3(x) { console.log(x); }``f3(true);

04 arguments


计算n个数字的和

定义一个函数,如果不确定用户是否传入了参数,或者说不知道用户传了几个参数,没办法计算,但是如果在函数中知道了参数的个数,等于也知道了每个参数的值.​​​​​​​

//定义``function f1() { `` //获取的是函数在调用的时候,传入了几个参数 //console.log(arguments.length);`` //使用arguments对象可以获取传入的每个参数的值 console.log(arguments); } f1(10,20,30,40,100,200);//调用 ​​​​​​​

function f1() {`` //arguments----->数组使用------伪数组--- var sum=0;`` for(var i=0;i<arguments.length;i++){ `` sum+=arguments[i]; `` } return sum;  } console.log(f1(10,20,30));

05 预解析:提前解析代码


预解析:**就是在解析代码之前,**预解析做什么事?

把变量的声明提前了----提前到当前所在的作用域的最上面

函数的声明也会被提前—提前到当前所在的作用域的最上面

函数调用的时候, 把会函数的声明提升到作用域的上面​​​​​​​

函数的声明提升到作用域

f1();//调用`` var num=20;//这个变量的声明会提升到变量使用之前 `` function f1() { `` console.log(num); ``//var num=10;  } function f1() {``console.log("小苏好猥琐");  } f1();`` function f1() { `` console.log("小苏没有助教猥琐"); `` } f1();

把变量的声明提前​​​​​​​

var num;`` console.log(num); `` num=10; `` function f1() { `` console.log("哈哈,助教好猥琐哦"); `` }   //f1();//报错

注意:预解析中,变量的提升,只会在当前的作用域中提升,提前到当前的作用域的最上面​​​​​​​

function f1() {`` console.log(num);//undefined `` var num = 10; `` } f1();   console.log(num);//报错

函数中的变量只会**提前到函数的作用域中的最前面,**不会出去

预解析会分段(多对的script标签中函数重名,预解析的时候不会冲突)​​​​​​​

function f1() {`` console.log(num);//undefined `` var num=10; } f1(); console.log(num);// function f1() { console.log("哈哈"); }

HTTP

  • HTTP 报文结构是怎样的?

  • HTTP有哪些请求方法?

  • GET 和 POST 有什么区别?

  • 如何理解 URI?

  • 如何理解 HTTP 状态码?

  • 简要概括一下 HTTP 的特点?HTTP 有哪些缺点?

  • 对 Accept 系列字段了解多少?

  • 对于定长和不定长的数据,HTTP 是怎么传输的?

  • HTTP 如何处理大文件的传输?

  • HTTP 中如何处理表单数据的提交?

  • HTTP1.1 如何解决 HTTP 的队头阻塞问题?

  • 对 Cookie 了解多少?

  • 如何理解 HTTP 代理?

  • 如何理解 HTTP 缓存及缓存代理?

  • 为什么产生代理缓存?

  • 源服务器的缓存控制

  • 客户端的缓存控制

  • 什么是跨域?浏览器如何拦截响应?如何解决?

    开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值