function test () {c=5;alert(c);
}
test();

当我们在执行test函数时,浏览器并不会报c未定义的错误,因为在js中,变量定义是通过var关键字,如果没有通过var定义,而直接进行引用,js引擎会自动把这个c定义为全局变量。

unction test () {c=5;alert(c);
}test();(function test2 () {alert(c)
})();

所以test2函数也可以拿到这个c。

 function test2 () {alert(c);console.log(c);var c=2;}

test2();

这个js引擎在编译时会先将c定义,但是不会给他赋值,赋值要在函数执行的时候,所以不会报c is not defined

但是c会赋值为undefined

今天参加了一场面试,面试过程中做了三道js的笔试题,题目只记得了大概了,不过也没关系。

       var a=1;var obj={b:2}function fn(){}fn.c=6;function test(a,obj,fn){a=3;obj.b=4;fn.c=5}test(a,obj,fn)alert(a);alert(obj.b);alert(fn.c);alert(a+obj.b+fn.c);

大意就是这样吧!问最后alert(a+obj.b+fn.c);的值会是多少!大家不妨先自己分析分析。答案是10。a等于1,obj.b等于4,fn.c等于5。分析如下

首先基本类型的传递方式为按值传递,也就是说test(a,obj,fn),中的a是全局变量的一个拷贝,在这个test函数里面改变a的值是不会影响外面全局变量a的值的,所以全局变量a的值依然是1,而对象是按引用类型传递的,也就是test函数中的obj参数,传递的将是指向该对象的一个引用。(感觉就像c里面的指针,传递的是一个指向某个内存的地址指针,通过该指针来找到对应的内存地址,不知道这个比方打的正不正确)。那么我们在函数里面改变obj.b实际上是会改变全局变量中obj.b的值的,而fn.c也是一个道理,因为在js中函数也是对象。那么很自然就得到了10.建议大家去了解一下按值传递和按引用传递的相关内容,高程里面好像有。

还有一个题目

      var name="djl";function echo(){alert(name);var name="eve";//就是变量的申明提前,但是只是执行了var name;但是此时是并没有给name赋值的,也就是说没有执行name="eve";
                alert(name);alert(age);}echo();

因为学的如果不深入的话很肯能会得到 djl,eve,语法错误这样的答案。但实际上是undefined,eve,语法错误。因为我们知道在js中有变量申明提升的特性。

就比如

alert(a);
var a;

我们会得到undefined,而不是js引擎报错 “Uncaught ReferenceError: a is not defined”。但是我们应该还要注意,变量申明确实提升了,但是却并不会执行赋值操作,也就是说我们在后面定义var a=1;js引擎提升的部分只有var a;在提升申明的过程中并不会执行a=1这个赋值操作。所以在上面var name="eve";只会提升申明,并不会在此时执行name="eve"的赋值操作,所alert的结果为undefined而不是eve也不是djl或者报错。

当然以上是我个人理解,感觉更好理解点。这里还有大神的理解(有点难懂):

http://www.laruence.com/2009/05/28/863.html

http://www.cnblogs.com/lhb25/archive/2011/09/06/javascript-scope-chain.html

转载于:https://www.cnblogs.com/djlxs/p/5068483.html

js function随笔相关推荐

  1. js function定义函数的4种方法

    js function定义函数的4种方法 1.最基本的作为一个本本分分的函数声明使用. 复制代码代码如下: 复制代码代码如下: function func(){}  或  var func=funct ...

  2. js function后面小括号

    js function后面小括号 function后面小括号有小括号为立即调用函数 立即调用函数 function后面小括号有小括号为立即调用函数 立即调用函数 IIFE (Immediately I ...

  3. js php mysql 是b,MySQL_BBS(php mysql)完整版(七),//下面是 top.js function KB_kee - phpStudy...

    BBS(php & mysql)完整版(七) //下面是 top.js function KB_keepItInIE(theName,theWantTop,theWantLeft) { the ...

  4. 网易云课堂Nodejs笔记(js Function,css,写法)

    网易云课堂Nodejs笔记(js Function,css) CSS position ---网页定位 margin ---元素外边距 padding ---元素内边距 nth-child()选择器 ...

  5. js Function对象扩展与延时执行函数实例代码

    网页特效 function对象扩展与延时执行函数实例代码 function.prototype.delay=function(this1,timeout){ this1=this1||null; ti ...

  6. node.js学习随笔

    Node的文件和文件系统API位于fs模块中: var fs=require("fs")//加载文件系统API 同步读取文件,通过传递编码获得文本而非字节: var text = ...

  7. js function如何传入参数未字符串_Python爬虫 JS 案例讲解:爬取漫画

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 以下文章来源于Python爬虫案例,作者麦自香 转载地址 https://blo ...

  8. JS function立即调用的几种写法

    //立即执行 (function () { alert(1) })() //立即执行 !function () { alert(1) }() //立即执行 +function () { alert(1 ...

  9. js function如何传入参数未字符串_JavaScript 学习之路- JS 小测验

    在学习 JS 的过程中,很多知识往往看一遍就过去了,然后自以为掌握了,其实再次碰到不一定能答得出来,看到一些有趣的东西还是要动手实践一下,而且时不时复习一下,非常有利于加深记忆.今天是五一,假日期间, ...

最新文章

  1. java多线程实现方法
  2. 【Android 异步操作】线程池 ( 线程池作用 | 线程池种类 | 线程池工作机制 | 线程池任务调度源码解析 )
  3. linux中文件名有英文括号的问题
  4. Mybatis查询日期范围
  5. Golang 入门笔记(二)下
  6. C++ 类的抽象初练
  7. android 实现打开相册
  8. linux下4g显卡可以挖矿吗,文件不断扩大,ETH矿工即将面临重大抉择问题
  9. [小结]InnoDB体系结构及工作原理
  10. Gulp,grunt,seajs/require和browserify/webpack的区别
  11. gist.github.com 被墙无法访问解决办法
  12. 【扩频通信】基于matlab扩频通信Gold序列特性仿真【含Matlab源码 1522期】
  13. C++中cin,cin.get()和cin.getline()的区别
  14. laravel项目出现Non-static method Redis::hGet() cannot be called statically的解决方法
  15. 移动硬盘格式化了,要怎么恢复数据
  16. php脉聊交友源码_脉聊源码-PHP脉聊交友网站源码(附app源码)下载-西西软件下载...
  17. php theexcerpt,wordpress函数get_comment_excerpt()用法示例
  18. js通用判断指定日期是周几,是否是周六、周日
  19. matlab设置线条颜色宽度线型
  20. 【CTF】LFI漏洞总结(PHP本地文件包含漏洞)

热门文章

  1. SharePoint 2010多语言UI,以及开发人员需要注意的
  2. 笨笨工作室告别十月模拟赛
  3. 中文版Visual Studio 2008 SP1 智能提示为英文的补丁发布
  4. Flutter动画SizeTransition使用解析
  5. Flutter 实现微信摇一摇的功能 Flutter 加速度感应
  6. Flutter BLoC 异步通信、BlocBuilder的基本使用、BlocProvider的初探
  7. Android应用Design Support Library完全使用实例
  8. 模型视图控制器mvc
  9. 常见的数据库连接字符串收集
  10. ant design的自定义主题 modifyVars无效的原因