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. 【ES6】ES6入门笔记

    1.概要 - ECMAScript2015(ES6)是Javascript最标准的语法式样,是在2015年6月由Ecma国籍组织公布的最新版本,现在已经被多个领域和浏览器所广泛采纳和使用. 2.学习网 ...

  2. JavaSE 学习笔记06丨并发

    Chapter 12. 并发 12.1 并发与并行 并发:指两个或多个事件在同一个时间段内发生. 并行:指两个或多个事件在同一时刻发生(同时发生). 在操作系统中,并发指的是在一段时间内宏观上有多个程 ...

  3. 生成微博授权url接口

    1.创建apps/oauth模块进行oauth认证 '''2.1 在apps文件夹下新建应用: oauth''' cd syl/apps python ../manage.py startapp oa ...

  4. DNS、IP地址、子网掩码和默认网关

    一.DNS服务器 DNS是指:域名服务器(Domain Name Server).在Internet上域名与IP地址之间是一一对应的,域名虽然便于人们记忆,但机器之间只能互相认识IP地址,它们之间的转 ...

  5. 这 6 个 Spring Boot 项目够经典

    不得不佩服 SpringBoot 的生态如此强大,今天我给大家推荐几款 Gitee 上优秀的后台管理系统,小伙伴们再也不用从头到尾撸一个项目了. SmartAdmin 我们开源一套漂亮的代码和一套整洁 ...

  6. 教学之Treap

    放在前面的话 本蒟蒻因为最近的题目总是搞点奇奇怪怪的平衡树,就去学了下\(Treap\) 现在来总结一下 由于本人是个蒟蒻,本文可能有部分错误,麻烦各位读者大佬在评论区提醒 什么是\(Treap\) ...

  7. Visual Studio 2012 Ultimate旗舰版下载地址与序列号

    (为了方便个人使用转的的别的帖子的内容,原文链接http://wenku.baidu.com/link?url=acL08J8bTNQ4S5Sd3n3oLN5KJTtrfe8hHuP8aUrNscKN ...

  8. 无所不能的Embedding5 - skip-thought的兄弟们[Trim/CNN-LSTM/quick-thought]

    这一章我们来聊聊skip-thought的三兄弟,它们在解决skip-thought遗留问题上做出了不同的尝试[Ref1-4], 以下paper可能没有给出最优的解决方案(对不同的NLP任务其实没有最 ...

  9. moviepy音视频剪辑:headblur函数遇到的TypeError: integer argument expected, got float错误的解决方案

    运行环境如下: python版本:3.7 opencv-python版本:4.2.0.34 numpy版本:1.19.0 错误信息: 在调用moviepy1.03版本的headblur函数执行人脸跟踪 ...

  10. PyQt(Python+Qt)学习随笔:QScrollArea为什么不起作用未出现滚动条?

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 老猿在进行Scroll Area部件测试时,在下面的窗体中放置了一个Scroll Area部件,在部 ...