var foo = 1; (function foo() { foo = 100; console.log(foo); }()) console.log(foo);
前几天刷题看到有个题目是这样的
问:打印的结果是什么?
答:
认识一下立即执行函数
立即执行函数,就是不需要被调用,立即能自己执行的函数。
语法格式:
第一种::(function () {} ());
第二种:(function () {}) ();
理解一下:
- 最外面有个小括号③包起来
- function () {} 也就是上图中的①是一个函数
- 函数后面小括号()②可以理解成调用函数(②在③里面,就是第一种格式的立即执行函数;在外面就是第二种格式)
立即执行函数也可以传参:
(function (a) { // 形参console.log(a); // 打印结果为 1})(1) // 实参
分析问题
题目在这里:
一步步分析 —— 第一步:
(function foo () {foo = 100;console.log(foo);
}())
在非严格模式下,未声明变量赋值的行为是允许的(想知道为什么被允许,自己百度一下吧);
函数是立即执行函数,所以无需调用并立即输入结果,foo是一个方法名,函数内又被定义成了局部变量,二者冲突,以为你要返回的是foo这个函数,所以会把函数返回给你。
第二步:拿走函数还剩下的是
var foo = 1;
console.log(foo);
此处的foo在函数外部,是一个全局变量,所以log打印的结果是1
按照执行的顺序所以先打印的是函数,然后是1
举一反一(不反三了)
(function () {foo = 100;console.log(foo);
}())
立即执行函数创建了一个独立的作用域,里面的变量都是局部变量。避免了命名冲突问题。
综上所述,上面的log打印的结果是 100。
温馨提示:
养成良好的代码规范很重要,平时还是要声明变量再赋值 and 同一个函数中,函数名和方法名不要重复~~
var foo = 1; (function foo() { foo = 100; console.log(foo); }()) console.log(foo);相关推荐
- 背景图片全屏适应的两种方法,background-size: cover; 或者(background-size: 100% 100%;)
background: #000 url(img1.jpg) no-repeat fixed center center;background-size: cover; 或者(background-s ...
- 孟欣 - js赋值顺序/var a = {n: 1} var b = a; a.x = a = {n: 2} console.log(a.x); console.log(b.x)
赋值顺序 以下为网上一个非常经典的面试题: var a = {n: 1} var b = a; a.x = a = {n: 2} console.log(a.x); console.l ...
- 【产业互联网周报】微软官宣把聊天机器人植入Office;任正非:4月份华为自研MetaERP将面世;...
关注ITValue,看企业级最新鲜.最价值报道! ChatGPT之父:监管机构应参与技术测试,减少AI对人类的威胁:李开复宣布亲自组建中国版ChatGPT公司,资金.算力将陆续到位:金蝶2022年亏 ...
- 输入框限制只能输入数字,正数、负数、0,最多两位小数;数字输入框可以输入负数,并最多保留两位小数;el-number-input去掉四舍五入和自动补齐小数;
场景: –要求1:输入框只能输入数字,可以使正数.负数.0,小数点最多保留两位. –要求2:不需要自动补齐小数点,也不需要自动四舍五入. element-ui的数字输入框el-input-number ...
- 互联网快讯:知乎登陆港交所;极米Z6X Pro、极米H3S超强性能获肯定;华为将发布新款折叠屏手机
国内要闻 苹果宣布与中国绿色碳汇基金会合作,并在成都市开展试点项目: 知乎正式登陆港交所:上市首日破发收跌23.58%,总市值79.89亿港元: 世界地球日:全国超3000万人种成"保护黄河 ...
- MySQL期末考试题目 题目1:查询employee数据表中的第5—8行的数据;题目2:查询每个部门的员工人数以及平均工资;题目3:查询‘孙威’的基本信息,包括员工编号、所在部门名称、岗位等级以及基本
上篇博客记录了我在mysql考试时遇到的报错,错过了考试时间[我不知道考试时间只有20分钟] 关于第二题,第三题,哪位大佬可以有点再简单的操作方法ma,或者其他方法,想学习学习,欢迎各位大佬指点指点! ...
- 6、春节到了,小明期盼收到压岁钱。他想:如果收到的钱超过1000元,那么捐助失学儿童;收到的钱在500~1000之间,那么购买航模;如果收到的钱不足500元,那么购买百科全书。
import java.util.Scanner; public class Zuoye1 { /** 春节到了,小明期盼收到压岁钱.他想: 如果收到的钱超过1000元,那么捐助失学儿童: 收到的钱在 ...
- 爱因斯坦曾出过这样一道数学题:有一条长阶梯,若每步跨2阶,最后剩下1阶;若每步跨3阶,最后剩下2阶;若每步跨5阶,最后剩下4阶;若每步跨6阶,则最后剩下5阶;只有每步跨7阶,最后才正好1阶不剩。参考例
爱因斯坦曾出过这样一道数学题:有一条长阶梯,若每步跨2阶,最后剩下1阶:若每步跨3阶,最后剩下2阶:若每步跨5阶,最后剩下4阶:若每步跨6阶,则最后剩下5阶:只有每步跨7阶,最后才正好1阶不剩.参考例 ...
- Ubuntu18.04下安装NVIDIA显卡驱动、docker、nvidia-docker;容器中编译安装opencv-4.4.0与darknet-yolov4并完成测试;容器封装镜像转移。2022
记录一下第一次在CSDN发博客,欢迎大家光临~ 文章目录 前言 一.宿主机配置 1.安装Ubunntu18.04 64位系统 2.为宿主机系统更换国内软件源Ubuntu 官方源服务器在欧洲,国内访问很 ...
- 写几个函数: ①输入10个职工的姓名和职工号; ②按职工号由小到大顺序排序,姓名顺序也随之调整; ③要求输入一个职工号,用折半查找法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。
写几个函数: ①输入10个职工的姓名和职工号: ②按职工号由小到大顺序排序,姓名顺序也随之调整: ③要求输入一个职工号,用折半查找法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名. #i ...
最新文章
- Android中图片的目录
- 风云编程python-Python中*args 和**kwargs的用法
- 【awk】用awk将Fasta文件序列变成一行
- neo4j cypher_Neo4j:Cypher – Neo.ClientError.Statement.TypeError:不知道如何添加Double和String...
- 英语----情态动词(下)
- 软件静态架构 软件组件图_组件图| 软件工程
- python docker库
- 减法运算的借位标志cf_数学|有理数运算法则及题型汇总
- html5 audio 资源,HTML5 Audio(音频)
- 最新浅析java源代码转换为机器码的编译执行过程
- 微信小程序短信倒计时60s功能
- 电气火灾的危害及预防
- 2018.1.23日记
- A12 屏幕旋转流程
- Unable to initialize EGL
- android吉他谱组件,Android - 自定义View 实现 文本吉他谱的 动态控制 实现
- PIA (Primary Interop Assembly) AIA (Alternate Interop Assembly)简介
- 首个AI数字人唱作歌曲刷屏背后:百度APP数字人度晓晓用AI陪伴亿万用户
- 谷歌浏览器拓展及脚本安装入门简介
- GFS(分布式文件系统)