今天我们要来探讨JS到底是透过何种参数传递方式呢? 废话不多说,上示例!! 我们先声明原始型别和物件型别来看看两者是否会有不一样的差异: var myStr = 'Hola': var myObj = {name:'Ann'}: 再来,声明另一个变量去复制他们: var myStr = 'Hola': var myObj = {name:'Ann'}: var copyStr = myStr: var copyObj = myObj: 然后,去修改复制过的变量内容并印出所有作比较: var my…
很多人认为JS的传递方式是值是Call by value, 物件及数组是Call by Reference.甚至还有人宣称其实JS是Call by sharing,那到底是哪一个呢? 这两天我们一一来分析这三种参数传递方式: 我们都以这个例子作为图解分析: var x =“Hola”: var y = x: Call by value 会直接把值拷贝过去 首先会先执行var x =“Hola”,声明一个变量x并初始化其值为“Hola”: 再来执行var y = x,声明一个变量y初始化其值为复制…
变量 在程序中将一个值指定(assign)给一个符号式的容器(symbolic container),叫做一个变量(variable). 声明在JS中目前提供了三种声明方式: var 声明一个变量,可选择是否给予一个初始值. 作用范围(scope)于该函式之内:但是如果在函式外声明,其作用范围则为全局性(global). var price = 10: price = price * 2: console.log(price): let(ES6新增) 声明一个内存块范围(scope)内的本地变量…
前几天有间单提到该如何声明函式及在Hositing中会发生什么事,但是函式的奥妙不仅于此. 身为一个使用JS的工程师,我们一定要熟悉函式到比恋人还熟! 这几天将会把函式逐一扒开跟各位一起探讨其中的奥妙. 函式是头等物件 这句话代表着函式与任何JS物件共存,也被当成一个物件. 函式可以被当成变量引用.用实值作声明,或是作为函式参数传递. 这个我们在前几天虽然有提到,但并没有说为什么函式可以这样作,今天就有说明到是因为头等物件所造成的,也让大家复习一下: //实质建立 function myFun(…
在上一篇提到了JS有三种声明变量的方式,分别是var.const及let,var和const let最大区别就是范围(scope)的限制.所以在这一篇我们会详谈何谓范围链及他们的复写优先级. 范围Scope 我们先来看一个例子: var globalVar = 'global': function scopeFun(){ globalVar =“change in scopeFun”: console.log(“1.”,globalVar)://1.change in scopeFun var…
前言 之前学JS时候都是靠着谷狗一路跌跌撞撞的学过来,从来没有去翻过MDN的文件,导致留了许多技术债给自己. 最近有幸遇到一位前辈并开始从头学JS,前辈表示学程序不看文件是想作死自己?于是我的第一份功课就是读完MDN的JS入门文件,在这过程中我也笔记了一些我认为蛮重要的地方,希望藉由这三十天的过程中能加深自己印象并分享给各位. 如果文章中有任何的错误或引用没有附上出处也欢迎各位指教. 数据类型 JavaScript中,总共有七种类型: String Number Boolean Null Und…
今天我们要来介绍ES6新增的其余参数及预设参数! 其余参数rest parameter …numbers可以让我们表示不确定数量的参数,并将其视为一个数组: function getVal(…numbers){ console.log(numbers): } getVal(1,24,5,6,7)://[[1,24,5,6,7]] function getVal(first,…numbers){ console.log(first,numbers): } getVal(1,24,5,6,7)://…
this是什么,取决于被呼叫的呼叫地点. 昨天有提到说,呼叫函式时候会传递隐含参数:arguments和this并讲解了arguments,今天我们就来探讨this吧! 什么是this 我们都会呼叫函式来使用,但有想过到底是从哪里呼叫到这个函式吗? this通常被称作函式背景空间(function context),也就是说透过this我们可以知道到底是由谁呼叫这支函式(yjssqsdg).我们无法在一开始定义它,只有函式呼叫时候才能确定. 函式的呼叫有四种方式: 作为函式呼叫 作为一个(物件)…
参数(argument)与函式参数(parameter) 在讨论函式时,很多人都会把这两个搞混,我自己也不例外. 虽然讲错别人也听得懂,但是我们还是要搞清楚这两个的定义到底是什么! 参数是当我们呼叫函式时传递给它的值 参数是我们在函式定义中所列出的变量看完还是有点不懂?没关系,上图! 声明式(declaration)与表达式(expression) 发现在前几天介绍声明函式时没有特别说明两者名称的差异,虽然这跟上面的参数与参数一样说错别人也懂(yjssqsdg),但我们还是要分清楚喔! 声明式:…
前两天说明面向对象的三大特性及JS不符合面向对象,只能称作支持面向对象而已,今天我们来看看JS的原型继承. 首先我们先来看,什么是原型(vmwork): 两个物件之间的原型关系(prototype relationship)跟继承(inheritance)有关: 每个物件都可以有另一个物件作为它的原型(prototype),如此一来,前者就会继承其原型的所有特性. 一个物件藉由内部特性(property)[[Prototype]]来指定其原型. 每个物件都有这个特性,但它可能是null.由[[P…