1、作用域经典面试题
 var num = 123;
// f1函数写好了,作用域就定下来了,也就是作用域链定下来了
// f1函数作用域链: f1函数作用域 ==> 全局作用域
function f1() {
console.log(num); // 123
}
function f2() {
var num = 456;
f1();
}
f2(); //打印啥?

 var num = 123
function f1(num) {
// 形参:理解成函数内声明的局部变量
// var num = 实参; 456
console.log(num) // 456
}
function f2() {
var num = 456;
f1(num); // num实参 f1(456)
}
f2()
 var num = 123
function f1(num) {
// var num = 实参; // undefined
console.log(num); // undefined
}
function f2() {
var num = 456;
f1();
}
f2()
var num = 123
function f1() {
console.log(num); // 123
}
function f2() {
var num = 456;
f1(num);
}
f2();

细节:

    //  1. 预解析(函数内的代码执行之前也要预解析)
    //  2. 函数内的形参理解: 理解成函数内声明的局部变量
    //  3. 函数作用域在函数写好的时候就已经确定下来了,作用域链就已经定下来了。
 
var num1 = 10;
var num2 = 20;
function fn(num1) {
// var num3; // 预解析
// var num1 = 实参; // undefined // 形参的理解
num1 = 100; // 修改的局部num1为100;
num2 = 200; // 修改的全局num2为200;
num3 = 300; // 修改的局部num3为300;
console.log(num1); // 100
console.log(num2); // 200
console.log(num3); // 300
var num3;
}
fn();
console.log(num1); // 10
console.log(num2); // 200
console.log(num3); // error*/
var num = 10;
fn1();
function fn1() {
console.log(num); // undefined
var num = 20;
console.log(num); //20
}
console.log(num); // 10

-------------------------------------------------------------------------------------------分割线--------------------------------------------------------------------------------------------------------

2、预解析经典面试题

 function fn1() {
// 函数内的代码在执行之前也要经过预解析
var num; // 预解析
console.log(num); // undefined
num = 20; // 修改局部num为20
console.log(num); // 20
}
var num; num = 10; // 修改全局num为10
fn1();
console.log(num); // 10
 var num = 10;
fn1();
function fn1() {
console.log(num); // 10
num = 20; // 修改全局的num为20
console.log(num); // 20
}
console.log(num); // 20

-------------------------------------------------------------------------------------------分割线-------------------------------------------------------------------------------------------------------------------

 封装console.log功能,封装成clg函数
 
 难点:console.log()里面的参数是不定的;封装的clg函数,形参的个数就无法确定

   // 以下代码未完成功能,可以在以下代码基础上完成封装功能
function clg(str, str2, str3){
console.log(str, str2, str3);
}
clg("哈哈", "嘻嘻", "呜呜", "呜呜", "嘤嘤", "嘿嘿");
// console.log("哈哈", "嘻嘻", "呜呜", "嘤嘤", "嘿嘿");
function clg(){
// console.log(arguments); // 打印arguments整体
// 打印arguments里面的每一项
console.log.apply(arguments, arguments);
// 等价于:
// arguments.log("哈哈", "嘻嘻", "呜呜", "呜呜", "嘤嘤", "嘿嘿");
}
clg("哈哈", "嘻嘻", "呜呜", "呜呜", "嘤嘤", "嘿嘿");
在以上clg函数基础上增加功能
function clg2(){
// 思路: 给arguments伪数组在头部前面添加 "友情提示:" unshift()
// arguments借用unshift方法实现添加功能
[].unshift.call(arguments, "友情提示:");
// console.log( arguments );
// 等价于:
// arguments.unshift("友情提示:");
console.log.apply(arguments, arguments);
}
// clg2("哈哈", "嘻嘻", "呜呜"); // 打印的时候是这样的 "友情提示:" 哈哈 嘻嘻 呜呜
// clg2("aa", "bb", "cc", 10); // 希望:这样调用打印的效果和下面代码效果一样
// clg2("友情提示:", "aa", "bb", "cc"); // 就是封装console.log的时候,第一个参数可以随便写
// call apply的第一个参数是用来修改this指向的
// 求和
function sum(n1, n2){
console.log(n1 + n2);
}
sum.call(null, 10, 20);
sum.apply(undefined, [10, 20]);

注:以上内容均为个人学习时所整理笔记

JavaScript之经典面试题的更多相关文章

  1. JAVASCRIPT中经典面试题

    //1.try catch finally中的return var n=1; function fun(){ try{ n++; m++;//报错 return n; }catch(err){ n++ ...

  2. JavaScript经典面试题(二)

    前言: 近年来T行业就业者越来越多,有关于编程行业的高薪工作也变得越来越难找,竞争力越来越大,想要在众多的应聘者当中脱颖而出,面试题和笔试题一定要多加研究和琢磨,以下记录的是自己的面试过程之中遇到的一 ...

  3. 20道JavaScript经典面试题

    该篇文章整理了一些前端经典面试题,附带详解,涉及到JavaScript多方面知识点,满满都是干货-建议收藏阅读 前言 如果这篇文章有帮助到你,️关注+点赞️鼓励一下作者,文章公众号首发,关注 前端南玖 ...

  4. 李洪强iOS经典面试题147-WebView与JS交互

    李洪强iOS经典面试题147-WebView与JS交互   WebView与JS交互 iOS中调用HTML 1. 加载网页 NSURL *url = [[NSBundle mainBundle] UR ...

  5. jQuery经典面试题及答案精选(转)

    jQuery是一款非常流行的Javascript框架,如果你想要从事Web前端开发这个岗位,那么jQuery是你必须掌握而且能够熟练应用的一门技术.本文整理了一些关于jQuery的经典面试题及答案,分 ...

  6. web前端经典面试题大全及答案

    阅读目录 JavaScript部分 JQurey部分 HTML/CSS部分 正则表达式 开发及性能优化部分 本篇收录了一些面试中经常会遇到的经典面试题以及自己面试过程中遇到的一些问题,并且都给出了我在 ...

  7. 经典面试题:从 URL 输入到页面展现到底发生什么?

    前言 打开浏览器从输入网址到网页呈现在大家面前,背后到底发生了什么?经历怎么样的一个过程?先给大家来张总体流程图,具体步骤请看下文分解! 本文首发地址为GitHub 博客,写文章不易,请多多支持与关注 ...

  8. 深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么 - Part 3

    备注: 因为文章太长,所以将它分为三部分,本文是第三部分. 第一部分:深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么 - Part 1 第二部分:深入浅出经典面试题:从浏览器中输入URL ...

  9. 【ASP.NET Core】EF Core - “影子属性” 深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么 - Part 1

    [ASP.NET Core]EF Core - “影子属性”   有朋友说老周近来博客更新较慢,确实有些慢,因为有些 bug 要研究,另外就是老周把部分内容转到直播上面,所以写博客的内容减少了一点. ...

随机推荐

  1. 与运算(&)、或运算(|)、异或运算(^)、右移运算符(>>>)本质介绍

    按位与运算符(&) 参加运算的两个数据,按二进制位进行"与"运算. 运算规则:0&0=0;  0&1=0;   1&0=0;    1&1= ...

  2. Arduion学习(一)点亮三色发光二极管

    这是我接触Arduion以来第一个小实验 实验准备: 1.查阅相关资料,了解本次实验所用到的引脚.接口的相关知识. 2.准备Arduion板(本次实验所用到的型号为mega2560).三色发光二极管. ...

  3. 获取Win和Linux系统启动时间,类似uptime功能,用于判断是否修改过系统时间

    目录 前言 测试代码 Win测试 Linux测试 总结 前言 有时候需要判断系统是否有修改过时间,最简单的方法就是获取当前时间A,然后sleep X秒,然后获取 时间B,如果 时间B - 时间A ≠ ...

  4. T-SQL——基础语法

    目录 0. 定义变量 1. 批处理 2. 条件逻辑--IF 3. 逻辑分支--CASE 4. 循环语句--WHILE 5. 附录--关于CASE表达式的实现函数 6. 参考 shanzm-2020年1 ...

  5. Java 关于策略模式+简单工厂模式下的思考

    导读 最近在做公司一个消息网关的服务,包括:短信.微信.邮件等,所有请求通过一个入口,方便接口的管理(记录日志.接口限流白名单啥的).如何写这个接口呢,还有为了以后扩展,对接过短信.微信.公众号的童鞋 ...

  6. KNN 算法-实战篇-如何识别手写数字

    公号:码农充电站pro 主页:https://codeshellme.github.io 上篇文章介绍了KNN 算法的原理,今天来介绍如何使用KNN 算法识别手写数字? 1,手写数字数据集 手写数字数 ...

  7. 面试官:说一下List排序方法

    1. 前言 排序算是比较高频的面试题了,节前面试了的两家公司都有问到排序问题,整理后分享给大家(文末见总结). 通常我们想到实现排序就是 Collections 工具类的 sort() 方法,而 so ...

  8. redis雪崩,击穿,穿透

    redis穿透 什么是redis穿透? 1.查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存 2.这将导致这个不存在的数据每次请求都要到存储层 ...

  9. vm虚拟机安装centos7。克隆镜像以及快照

    为了方便下次安装配置,保存一篇安装centos的文章 https://blog.csdn.net/wsq119/article/details/80635558 步骤非常详细,一看就会. 这一篇是关于 ...

  10. 项目测试环境自动化部署[jenkins前后端配置、Nginx配置]

    持续部署:关注点在于项目功能部署到服务器后可以正常运行,为下一步测试环节或最终用户正式使用做准备.(问题点:一个环节有问题,其他环节跟着有问题) 持续集成:关注点是在于尽早发现项目整体运行问题,尽早解 ...